我正在构建一个中等大小的C ++库,并拼凑了我的CMakeLists.txt
文件来自一堆不同的例子等。我试图理解include_directories
与{{1}之间的区别说明。
我列出了下面的一些代码,但只是想以序言为前言。我使用target_link_libraries
库来构建我的一些代码。所以我有一条指令Boost
在构建过程中包含Boost源目录。所以我假设Cmake在构建任何可执行文件时都会包含这些Boost Source文件 - 没有任何额外的显式指令。
但是后来我在构建可执行文件时遇到了INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
。这表明我不仅需要包含Boost目录,还需要将其与可执行文件明确链接。
所以我不确定我是否真的需要这两个步骤,或者我是否只需要TARGET_LINK_LIBRARIES( gd_validator ${Boost_LIBRARIES} )
指令就可以了。
INCLUDE_DIRECTORIES
答案 0 :(得分:4)
是的,你需要两者。
include_directories
会告诉编译器在哪里查找头文件,在本例中是boost库的头文件。
target_link_libraries
将告诉链接器您要链接哪些库与可执行文件。
虽然标题将提供(大多数情况下)访问库的接口,但库本身已预编译并链接到您的应用程序。
答案 1 :(得分:0)
include_directories
指定要搜索包含文件(标题)的目录。 target_link_libraries
指定要链接到目标(可执行文件或库)的库。
两件完全不同的事情。