首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用CMake正确添加包含目录

如何使用CMake正确添加包含目录
EN

Stack Overflow用户
提问于 2012-12-04 21:04:54
回答 7查看 583.4K关注 0票数 315

大约一年前,我问起了header dependencies in CMake

我最近意识到这个问题似乎是CMake认为这些头文件是项目外部的。至少在生成Code::Blocks项目时,头文件不会出现在项目中(源文件会出现)。因此,在我看来,CMake认为这些头文件是项目外部的,并且不会在依赖项中跟踪它们。

在CMake教程中快速搜索一下,只指向include_directories,它似乎没有做我希望的事情……

通知CMake特定目录包含要包含的头文件,以及生成的Makefile应该跟踪这些头文件的正确方式是什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-12-04 21:09:31

必须做两件事。

首先添加要包含的目录:

代码语言:javascript
复制
target_include_directories(test PRIVATE ${YOUR_DIRECTORY})

如果您坚持使用不支持target_include_directories的非常旧的CMake版本(2.8.10或更早的版本),您也可以使用传统的include_directories

代码语言:javascript
复制
include_directories(${YOUR_DIRECTORY})

然后,还必须将头文件添加到当前目标的源文件列表中,例如:

代码语言:javascript
复制
set(SOURCES file.cpp file2.cpp ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)
add_executable(test ${SOURCES})

这样,头文件将作为依赖项出现在Makefile中,例如在生成的Visual Studio项目中(如果您生成了一个项目)。

如何将这些头文件用于多个目标:

代码语言:javascript
复制
set(HEADER_FILES ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)

add_library(mylib libsrc.cpp ${HEADER_FILES})
target_include_directories(mylib PRIVATE ${YOUR_DIRECTORY})
add_executable(myexec execfile.cpp ${HEADER_FILES})
target_include_directories(myexec PRIVATE ${YOUR_DIRECTORY})
票数 339
EN

Stack Overflow用户

发布于 2012-12-04 21:10:34

首先,使用include_directories()告诉CMake将目录作为-I添加到编译命令行。其次,在add_executable()add_library()调用中列出标头。

举个例子,如果你的项目的源代码在src中,并且你需要来自include的头文件,你可以这样做:

代码语言:javascript
复制
include_directories(include)

add_executable(MyExec
  src/main.c
  src/other_source.c
  include/header1.h
  include/header2.h
)
票数 93
EN

Stack Overflow用户

发布于 2019-04-18 17:30:28

添加include_directories("/your/path/here")

这类似于使用-I/your/path/here/选项调用gcc

确保在路径两边加上双引号。其他人没有提到这一点,这让我被困了两天。因此,这个答案适用于那些对CMake非常陌生并且非常困惑的人。

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

https://stackoverflow.com/questions/13703647

复制
相关文章

相似问题

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