大约一年前,我问起了header dependencies in CMake。
我最近意识到这个问题似乎是CMake认为这些头文件是项目外部的。至少在生成Code::Blocks项目时,头文件不会出现在项目中(源文件会出现)。因此,在我看来,CMake认为这些头文件是项目外部的,并且不会在依赖项中跟踪它们。
在CMake教程中快速搜索一下,只指向include_directories
,它似乎没有做我希望的事情……
通知CMake特定目录包含要包含的头文件,以及生成的Makefile应该跟踪这些头文件的正确方式是什么?
发布于 2012-12-04 21:09:31
必须做两件事。
首先添加要包含的目录:
target_include_directories(test PRIVATE ${YOUR_DIRECTORY})
如果您坚持使用不支持target_include_directories
的非常旧的CMake版本(2.8.10或更早的版本),您也可以使用传统的include_directories
:
include_directories(${YOUR_DIRECTORY})
然后,还必须将头文件添加到当前目标的源文件列表中,例如:
set(SOURCES file.cpp file2.cpp ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)
add_executable(test ${SOURCES})
这样,头文件将作为依赖项出现在Makefile中,例如在生成的Visual Studio项目中(如果您生成了一个项目)。
如何将这些头文件用于多个目标:
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})
发布于 2012-12-04 21:10:34
首先,使用include_directories()
告诉CMake将目录作为-I
添加到编译命令行。其次,在add_executable()
或add_library()
调用中列出标头。
举个例子,如果你的项目的源代码在src
中,并且你需要来自include
的头文件,你可以这样做:
include_directories(include)
add_executable(MyExec
src/main.c
src/other_source.c
include/header1.h
include/header2.h
)
发布于 2019-04-18 17:30:28
添加include_directories("/your/path/here")
。
这类似于使用-I/your/path/here/
选项调用gcc
。
确保在路径两边加上双引号。其他人没有提到这一点,这让我被困了两天。因此,这个答案适用于那些对CMake非常陌生并且非常困惑的人。
https://stackoverflow.com/questions/13703647
复制相似问题