CMake如何包含没有源文件的头文件
CMake how to include headers without sources?
这可能是一个愚蠢的问题,但我确实看过谷歌的前两个页面,没有成功。
我正在编写一个头仅库,我无法正确设置CMake配置,以便当我构建给定main.cpp
的解决方案时找到适当的包含。
如何做到这一点呢?
编辑
所以我可能应该给出更详细的解释。
假设我有一个./src
文件夹,里面有:./src/core
和./src/wrappers
。在每个文件夹中,我有.h
文件,需要包含在main.cpp
文件中:
#include <src/core/reader.h>
当我输入CMakeList.txt
的时候:
include_directories(src/core)
add_executable(main main.cpp)
我收到这样的消息:src/core/reader.h
no such file or 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)
这样做的好处是,如果您想在多个目标中使用它,很容易做到。
只需添加一个include_directories()
指令,以便找到目标项目可以找到的头库。
根据你的编辑。查找
#include <src/core/reader.h>
你需要添加
include_directories(/full_parent_path_of_src)
如果我正确理解您的问题,那么在您的CMakeLists.txt中,您需要为头库的每个目录添加include_directories(<DIRECTORY>)
。
- 为测试目标创建具有不同源文件夹的文件
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 生成文件:动态源文件名和对象目录
- 无法使用 CMake 从其他文件夹添加源文件
- CMake 源文件找不到头文件
- 给定一个源文件,有没有办法要求 gcc 返回仅直接包含的头文件的列表?
- UE4 - Visual Studio在我从编辑器添加新的c ++文件后无法打开任何源文件 - UBT_COMPILED
- cpp 在主源文件中包括.cpp文件导致错误"duplicate symbol"
- 如何将 .ui 完全转换为 C++ 头文件和源文件
- 在生成文件中添加源文件并更新依赖项
- CMake 在源文件附近找不到头文件
- GNU 在看到其他同名文件时重用源文件
- #include "date.h" 创建错误 E1696 无法打开源文件"date.h",也无法打开包含文件:没有这样的文件或目录
- DirectX 11 文件无法打开源文件
- 用libclang解析源文件 - 链接问题包括文件
- C++ - 定义类模板(头文件/源文件)
- 在使用头文件/源文件时访问类变量的麻烦
- 如何声明和定义全局变量,以便从所有头文件/源文件中正确访问它们
- 将lambda传递给模板类中的方法(头文件/源文件问题)
- LNK 2019/1120我的头文件/源文件实践中的双重链接列表错误