我刚接触CMake,希望了解一些关于target_link_libraries的细节。
如果要包含一个库,比如boost,我们可以简单地使用include_directories(BOOST_LIBRARY_PATH)。这样我的项目就能正确编译,没有错误报告。
但是在阅读一些在线文章后,我注意到人们通常会在include directories之后添加target_link_libraries(executable boost_library),所以我想知道为什么需要这行。
由于我的项目在性能方面非常敏感(即,我希望它尽可能快地运行),我的问题如下:
(1) target_link_libraries实际上是做什么的? (2) 如果我们不添加这行,会影响性能吗? (3) 包含target_link_libraries有什么优势?
target_link_libraries
负责将库添加到链接器的命令行中。如果您使用某个库但未为链接器指定它,当创建可执行文件或共享库时,将会出现"undefined reference"(或"unresolved externals")错误: https://dev59.com/0Wcs5IYBdhLWcg3wym_D - undefinedtarget_link_libraries
。但是Boost提供了一个名为Boost::Boost
(或Boost::headers
)的实用目标。使用该目标调用target_link_libraries
将只添加包含目录,而不会添加库文件。 - undefined