cmake编译
在 CMake 中,add_dependencies
和 target_link_libraries
是两个不同的命令,用于不同的目的。
add_dependencies
add_dependencies
用于在目标之间建立构建依赖关系。它指定一个目标在另一个目标之前构建。
语法:
1 | add_dependencies(target-name dependency-target1 [dependency-target2 ...]) |
target-name
: 需要依赖其他目标的目标。dependency-target
:target-name
依赖的目标。
使用场景:
- 当你希望确保某个目标在另一个目标之前构建时使用。例如,当你有一个生成器目标,它生成某些文件,这些文件需要被另一个目标使用时。
示例:
1 | add_executable(main main.cpp) |
在这个例子中,main
可执行文件依赖于 generator
目标,generator
目标会运行一个 Python 脚本来生成 generated_code.cpp
文件,然后 main
才会构建。
target_link_libraries
target_link_libraries
用于将目标链接到库或其他目标。它指定链接器在构建目标时应使用的库。
语法:
1 | target_link_libraries(target-name [PRIVATE|PUBLIC|INTERFACE] library1 [library2 ...]) |
target-name
: 需要链接库的目标。[PRIVATE|PUBLIC|INTERFACE]
: 指定库的可见性和使用范围:PRIVATE
: 库只对目标本身可见,不传播。PUBLIC
: 库对目标和所有使用该目标的依赖可见。INTERFACE
: 库仅对使用该目标的依赖可见,不直接链接到目标。
library
: 要链接的库或目标。
使用场景:
- 当你希望将一个目标链接到一个库或另一个目标时使用。例如,将可执行文件链接到一个共享库或静态库。
示例:
1 | add_library(mylib STATIC mylib.cpp) |
在这个例子中,main
可执行文件链接到 mylib
库,这意味着在构建 main
时,链接器会将 mylib
库包含进来。
总结
add_dependencies
是在目标之间建立构建顺序依赖关系,确保一个目标在另一个目标之前构建。target_link_libraries
是用于指定目标在链接时需要的库或目标。
这两个命令在 CMake 中有着不同的用途,但都在管理项目的构建流程中起着重要作用。