首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CMake:如何选择为每个源文件传递哪些包含目录

CMake:如何选择为每个源文件传递哪些包含目录
EN

Stack Overflow用户
提问于 2018-08-27 01:58:06
回答 2查看 397关注 0票数 1

我有一个包含许多源文件和头文件的项目。我可以将包含头文件的每个目录添加到CMake的include目录中,这样它们就可以通过-I选项传递给每个源文件的编译。

代码语言:javascript
复制
include_directories(I/will/need/tons/of/these);

有没有办法通过CMake让我在编译每个源文件时只传递相关的包含目录?

例如,如果我自己在命令行上编写这段代码,我会使用如下脚本:

代码语言:javascript
复制
g++ -I $(./get_include_dirs.sh foo.cpp) -o foo.o foo.cpp

其中$(./get_ include _dirs.sh foo.cpp)是一个仅展开到foo.cpp的包含目录的脚本

这可以在CMake上完成吗?我不知道如何告诉cmake对每个文件使用该脚本

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-27 03:17:46

通常,您应该在目标级别设置包含目录而不是全局目录:

代码语言:javascript
复制
set(my-target-sources
  source1.cpp
  ...
  sourceN.cpp
)
add_library(my-target
  ${my-target-sources}
)
target_include_directories(my-target
  [PUBLIC|PRIVATE|INTERFACE]
    directory-relevant-to-my-target
)

这样,在编译my-target时,编译器将在与my-target相关的目录中查找头文件。我认为没有理由在源文件粒度上设置include目录。

为了从CMake执行脚本,您可以使用execute_process并在OUTPUT_VARIABLE参数中收集目录列表,但我不建议这样做,因为这样做会失去CMake固有的可移植性。

票数 0
EN

Stack Overflow用户

发布于 2018-08-27 02:27:26

你可以像下面这样使用SET调用;

代码语言:javascript
复制
set(HEADERS h1.h h2.h h3.h) 
set(CPP_SOURCE myfunc.cpp)


add_executable(prog ${HEADERS} ${SOURCE_FILES} )

PS:最好检查一下文件的层次结构,因为一般来说,您应该只使用include_directories调用。

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

https://stackoverflow.com/questions/52028912

复制
相关文章

相似问题

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