首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cmake include_directories()

Cmake include_directories()
EN

Stack Overflow用户
提问于 2013-11-14 23:23:15
回答 2查看 66.6K关注 0票数 17

这是我的项目树:

代码语言:javascript
复制
project
| + src
| + external
| | + foo
| | | + include
| | | | - foo.hpp
| | | + src
| | | | - foo.cpp
| | | | - CMakeLists.txt
| | | - CMakeLists.txt 
| | + CMakeLists.txt 
| + src
| | - main.cpp
| - CMakeLists.txt

foo.cpp包括foo.hpp:

代码语言:javascript
复制
// foo.cpp
#include "foo.hpp"

现在的问题是,在顶层CMake中包含目录可以成功地找到foo.hpp,但是如果我将其包含在子项目中,则不会成功。(在编译可执行文件之前包含目录)。

代码语言:javascript
复制
// project/CMakeLists.txt
include_directories(external/foo/include) //OK
add_subdirectory(external)

add_executable(main main.cpp)
target_link_libraries(main foo)

// project/external/CMakeLists.txt
add_subdirectory(foo)

// project/external/foo/CMakeLists.txt 
include_directories(include) // NOT WORKING
add_subdirectory(src)

// project/external/foo/src/CMakeLists.txt 
add_library(foo foo.cpp)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-15 16:59:07

引用include_directories的文档

将包含目录添加到当前CMakeLists文件的目录属性INCLUDE_DIRECTORIES中。它们还会添加到当前CMakeLists文件中每个目标的目标属性INCLUDE_DIRECTORIES中。目标属性值是生成器使用的属性值。

INCLUDE_DIRECTORIES directory property继承到目录中的所有子目录和所有目标。

  • include_directories指定${CMAKE_CURRENT_SOURCE_DIR}是多余的,因为默认情况下,相对路径被解释为相对于此目录。您应该抛出它来增加包含目录,子目录和其父目录中的readability.
  • Specifying目录都是多余的。您应该避免这种情况,并使用一个location.
  • Use get_propertymessage来仔细检查所有目录和目标是否最终在其INCLUDE_DIRECTORIES属性中包含正确的条目。
  • 如果您可以随意要求CMake 2.8.11作为最低要求,请考虑完全放弃include_directories,改用target_include_directories。这样做的好处是,在每个目标的基础上独占地解析包含的依赖关系,这通常是更理想的行为。
票数 29
EN

Stack Overflow用户

发布于 2013-11-15 01:00:46

这可能是一个范围问题。我觉得您在这里要做的是将设置从/project/external/foo/CMakeLists传播到/project/CMakeLists,这样就可以将此设置传播到/project/src/CMakeLists。但不幸的是,除了缓存值之外,在cmake中不可能从较低级别的CMakeLists传播到较高级别的for。这意味着您还需要在/project/src/CMakeLists.txt中添加include_directories(${CMAKE_SOURCE_DIR}/external/foo/include)。或者,就像您已经做的那样,您可以只在顶级CMakeLists中添加此行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19981534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档