c++ 如何处理不必要的链接

atmip9wb  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(151)

我正在清理/重构一个相当旧的项目,我意识到他们犯了一个错误(?),在所有CMakeLists.txt文件中添加了不必要的目标链接:

LIST(APPEND ${PROJECT_NAME}_LIBRARIES RecursiveLy_generated_list_with_unnecessarystuff)
target_link_libraries(sample PUBLIC ${${PROJECT_NAME}_LIBRARIES})

我用一个只包含必要链接的列表替换了这个列表,编译时间明显减少了。
1.所以我想知道,当链接的库的符号不使用时,cmake会做什么?
1.我还清理了include目录(项目的所有.h文件都是递归添加的(很多都不需要)),cmake是否认为使用这些符号是因为它们出现在标头中,即使这些标头不是#include d?

hfyxw5xn

hfyxw5xn1#

如何处理不必要的链接
将适当的命令行选项传递给编译器。
当链接的库的符号没有使用时,cmake会做什么?
什么都没有。CMake甚至不知道库的符号是否被使用。CMake不链接你的代码,编译器链接。
cmake是否认为这些符号被使用是因为它们出现在标头中,即使这些标头没有#included?
不,CMake不知道在何处使用了哪些符号。CMake不知道头文件的内容。CMake创建要运行的命令列表。要运行的命令取决于CMakeLists.txt中写入的内容。

相关问题