我有CMake项目,其目录结构如下:
├── build
├── CMakeLists.txt
├── src
│ ├── CMakeLists.txt
│ ├── headers
│ │ └── utility.h
│ └── main.cpp
└── tests
├── CMakeLists.txt
├── testfeature_a
│ ├── CMakeLists.txt
│ └── test_me.cpp
└── test_main.cpp
在test_me.cpp中,我想包含Utility.h,因为我想测试在那里定义的功能。因此,我做了 #include“ headers / utility.h” ,在testfeature_a CMakeLists.txt中,我这样做了:
file(GLOB SRCS *.cpp)
ADD_EXECUTABLE(testfeature_a ${SRCS})
include_directories(src/headers)
TARGET_LINK_LIBRARIES(
testfeature_a
libgtest
libgmock
)
add_test(NAME testfeature_a
COMMAND testfeature_a)
但是制作失败并显示错误消息 致命错误:headers / utility.h:没有此类文件或目录。 如何在test_me.cpp中包含标头目录
答案 0 :(得分:0)
您在include_directories()
中的路径可能不正确。您可以检查以下两件事
该文件似乎是tests-folder中的CMakeLists.txt,因此您需要先进入一个文件夹,然后才能进入src文件夹,即include_directories(../src/headers)
。
在#include "headers/utility.h"
中已指定时,请在include_directories(src/headers)
中重复标题-文件夹。在cpp文件中使用#include "utility.h"
或在CMakeLists.txt中使用include_directories(src)
。
其他选项是,您根本不需要在CMakeLists.txt中指定标头文件夹。您可以简单地使用#include "path/to/your/file.h
而不进行任何其他配置。
要在CMakeLists.txt中调试路径,可以调用message函数,例如message(${your_path})
,因此在执行时会打印出来,您可以检查它是否正确。
此外,您可以使用CMake内置变量,例如CMAKE_CURRENT_SOURCE_DIR和CMAKE_SOURCE_DIR,例如include_directories(${CMAKE_SOURCE_DIR}/src/headers)