CMake中库目标下add_dependencies与target_link_libraries的语义差异
CMake中
add_dependencies(tgt1 tgt2)与target_link_libraries(tgt1 tgt2)的语义差异(tgt2为库目标) add_dependencies(tgt1 tgt2)的核心语义:仅构建顺序依赖
这个命令只向CMake传达一个要求:在开始构建目标tgt1之前,必须先完成tgt2的全部构建流程。它完全不涉及链接操作——CMake不会把tgt2的库文件和tgt1绑定,也不会传递任何与链接、编译相关的属性。你可以把它理解成“tgt1需要tgt2先做好,但不一定会用它”。target_link_libraries(tgt1 tgt2)的核心语义:构建顺序依赖+链接依赖
这个命令包含两层语义:- 隐含了
add_dependencies的效果,确保tgt2在tgt1之前构建完成; - 明确要求CMake在链接tgt1时,将tgt2的库文件链接进去,同时会自动传递tgt2的相关编译/链接属性(比如tgt2的头文件目录、编译选项等)。简单说,它是为了让tgt1能够调用tgt2库中的符号,是真正的“依赖使用”关系。
- 隐含了
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

