iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Software Development

30 天 CMake 跨平台之旅系列 第 23

[Day 23] 讓別人 Link 我的 Project

  • 分享至 

  • xImage
  •  

本日內容

  • 使用 FetchContent
  • 使用 find_package()
  • 預告

Day23 - Colab

今天會繼續用 Day 21 的範例, 不過和 Day 22 的打包不同
而是另外寫一個只有執行檔的專案, 並使用該範例提供的 headers 和 libraries
看看我們前幾天寫的 Project 是否真的能被使用

在此之前, 我們先回頭將該範例的 libraries 加上 Namespace

add_library(Day21Example::SharedLib ALIAS SharedLib)
add_library(Day21Example::StaticLib ALIAS StaticLib)

接著看看今日的專案架構
CMakeLists.txt

cmake_minimum_required(VERSION 3.25)
project(Day23Sample CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/src/cmake)
include(dependencies)

add_subdirectory(src)

src/CMakeLists.txt

add_executable(Day23Sample_Main main.cpp)
target_link_libraries(Day23Sample_Main PRIVATE
    Day21Sample::SharedLib
    Day21Sample::StaticLib
)

src/cmake/dependencies.cmake

include(FetchContent)
set(FETCHCONTENT_QUIET OFF)
FetchContent_Declare(Day21Sample
    GIT_REPOSITORY https://github.com/erichung0404/cmake-example.git
    GIT_TAG day22-packaging
    GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(Day21Sample)

src/main.cpp

#include <shared_lib.h>
#include <static_lib.h>

int main() {
	print_shared_lib();
	print_static_lib();
	return 0;
}

使用 FetchContent

從上面可以看到有 src/cmake/dependencies.cmake module 負責撈 external project
因為裡面是使用 FetchContent, 會直接引入該專案的 build tree, 所以我們不需要安裝就能使用該 library targets

https://ithelp.ithome.com.tw/upload/images/20230923/20161950K83mbCG3aX.png
https://ithelp.ithome.com.tw/upload/images/20230923/20161950gsq0EvRine.png

可以看到我們成功引進前幾天自己寫的 libraries 了!

使用 find_package()

上面的 FetchContent 是直接將 build tree 拉進來
現在讓我們來修改一下 src/cmake/dependencies.cmake, 改成用 find_package() 拉套件
src/cmake/dependencies.cmake

find_package(Day21Example REQUIRED)

然後下載 Day 22 打包好的套件並解壓縮到 /usr/local/opt 底下

tar xvf ... -C /usr/local/opt

https://ithelp.ithome.com.tw/upload/images/20230923/20161950aSvVriuAQr.png

再重新執行一次
https://ithelp.ithome.com.tw/upload/images/20230923/20161950SO0znk11E0.png
Voila! 可以看到我們也成功引入安裝的套件了🎉🎉🎉

預告

單平台的建置到這邊就告一個段落了
下一篇會介紹如何分析並改善我們 build process 的效率


上一篇
[Day 22] 打包我的 Project
下一篇
[Day 24] 你需要再快一點! Build Performance (一)
系列文
30 天 CMake 跨平台之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言