CMake 的依赖关系图
引出例子
假设有一个银行项目,这个项目有五个 target。
- Calculations
- Drawing
- TerminalApp
- GuiApp
- Checksum
这五个 target 的依赖关系如下图所示。
理清关系
我们就可以这样去编写 cmake 的列表文件。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20cmake_minimum_required(VERSION 3.26)
project(BankApp CXX)
add_executable(terminal_app terminal_app.cpp)
add_executable(gui_app gui_app.cpp)
target_link_libraries(terminal_app calculations)
target_link_libraries(gui_app calculations drawing)
add_library(calculations calculations.cpp)
add_library(drawing drawing.cpp)
add_custom_target(checksum ALL
COMMAND sh -c "cksum terminal_app>terminal.ck"
COMMAND sh -c "cksum gui_app>gui.ck"
BYPRODUCTS terminal.ck gui.ck
COMMENT "Checking the sums..."
)
add_dependencies(checksum terminal_app gui_app)
这里我们看到了列表文件中先 target_link_libraries()
再add_library()
. 这实际上是没有问题的。它们之间的依赖关系是不会乱的。
但是为了保证 checksum 的依赖关系,在末尾添加了一行add_dependencies(checksum terminal_app gui_app)
,这一行显式的宣布了 checksum 的依赖关系。