CMake如何在没有源代码的情况下包含头文件?
这可能是一个虚拟的问题,但我从字面上看谷歌的两个第一页没有成功。
我正在写头文件库,而且我无法正确设置CMake配置,以便在构建解决方案时给出main.cpp
找到合适的包含。
这怎么能完成?CMake如何在没有源代码的情况下包含头文件?
编辑
所以我也许应该给一点更详细的解释。
可以说我有一个./src
文件夹:./src/core
和./src/wrappers
。每个文件夹里我必须要包含在main.cpp
文件.h
文件需要:
#include <src/core/reader.h>
不过,当我把在CMakeList.txt
类似:
include_directories(src/core)
add_executable(main main.cpp)
我收到这样的消息:src/core/reader.h
没有这样的文件或目录。
只需添加一个include_directories()
指令,即可找到目标项目只能找到标题头库的位置。
根据您的编辑。为了找到
#include <src/core/reader.h>
您需要添加
include_directories(/full_parent_path_of_src)
如果我正确理解你的问题,然后在你的CMakeLists.txt您需要添加include_directories(<DIRECTORY>)
为你的头库的每一个目录。
为了能够使用该路径,您应该参考src
的父目录。
假设顶层CMakeLists.txt
是在src
相同的水平,则可以改为使用:
include_directories(${CMAKE_SOURCE_DIR})
正如从CMAKE_SOURCE_DIR
文档:
到源的顶层路径树。
如果src
是直接在顶级目录,这应该让你使用这样的:
#include <src/whatever/you/want.h>
也就是说,一对夫妇的建议:
-
我宁愿补充一点:
include_directories(${CMAKE_SOURCE_DIR}/src)
,并使用此:
#include <whatever/you/want.h>
不再在你的路
src
和限制搜索区域。 -
我可能会使用
target_include_directories
代替include_directories
并指定目标用于该规则:target_include_directories(main ${CMAKE_SOURCE_DIR}/src)
这必须在
add_executable
后放,否则目标是不可见的。
这可能是有意义的在某些情况下,另一种选择是创建一个专用目标的唯一头库:
add_library(headerlib INTERFACE)
target_include_directories(headerlib INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
然后使用它:
target_link_libraries(mytarget headerlib)
这有一个好处,如果你想在多个目标中使用它,这很容易。
@Jairo好吧,随时投票或接受答案,如果它的作品。 ;-) – skypjack