我似乎在使用 -I
设置包含路径( include_directories()
)时遇到问题CMake 中的命令。我的项目目录如下:
Root
| - CMakeLists.txt
| - libs
| - | - CMakeLists.txt
| - | - inc
| - | - | - // lib specific includes
| - | - src
| - | - | - // lib specific sources
| - proj1
| - | - CMakeLists.txt
| - | - inc
| - | - | - // proj1 specific includes
| - | - src
| - | - | - // proj1 specific sources
根
CMakeLists.txt
文件看起来像这样:project(ROOT)
add_subdirectory(libs)
add_subdirectory(proj1)
CMakeLists.txt
文件下 libs
:project(lib)
add_library(lib STATIC ${lib_hdrs} ${lib_srcs}) // for conciseness, omitted set()
最后,
CMakeLists.txt
文件下 proj1
:project(proj1)
include_directories("${ROOT_SOURCE_DIR}/lib/inc") # <- problem line?
add_executable(proj1 ${proj1_srcs})
target_link_libraries(proj1 lib)
目标是从 libs 中的源文件和头文件创建库,然后链接到在 proj1 下生成的可执行文件。 Proj1 有一些文件
#include
libs中的东西包括,所以我需要添加要与-I
一起使用的目录.根据文档,这就是 include_directories()
应该做。然而,尽管明确设置并跟随它进行调试 message(${INCLUDE_DIRECTORIES})
, INCLUDE_DIRECTORIES
variable 是一个空字符串,并且没有为包含路径指定目录,所以我编译 proj1 失败。我也尝试删除
${ROOT_SOURCE_DIR}/inc
周围的引号看看这是否有帮助,但没有运气。
最佳答案
include_directories()
填充名为 INCLUDE_DIRECTORIES
的目录属性:
http://www.cmake.org/cmake/help/v2.8.12/cmake.html#prop_dir:INCLUDE_DIRECTORIES
请注意,CMake 2.8.11 学习了 target_include_directories
命令,填充 INCLUDE_DIRECTORIES
目标属性(property)。
http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories
另请注意,您可以对“针对 lib
的头文件进行编译”这一事实进行编码。目标,包含目录 lib/inc
需要'进入 lib
使用 target_include_directories
定位自身与 PUBLIC
关键词。
add_library(lib STATIC ${lib_hdrs} ${lib_srcs}) # Why do you list the headers?
target_include_directories(lib PUBLIC "${ROOT_SOURCE_DIR}/lib/inc")
另请注意,我假设您没有安装
lib
供他人使用的库。在这种情况下,您需要为构建位置和安装位置指定不同的头目录。target_include_directories(lib
PUBLIC
# Headers used from source/build location:
"$<BUILD_INTERFACE:${ROOT_SOURCE_DIR}/lib/inc>"
# Headers used from installed location:
"$<INSTALL_INTERFACE:include>"
)
无论如何,这仅在您安装
lib
时才重要。供他人使用。后
target_include_directories(lib ...)
上面你不需要另一个 include_directories()
称呼。 lib
target '告诉' proj1 它需要使用的包含目录。另见
target_compile_defintions()
和 target_compile_options()
.
关于cmake - 如何从 CMakeLists.txt 文件设置 include_directories?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460707/