如何在简单的CMake项目中添加include_directory

时间:2018-09-27 18:42:02

标签: cmake

我有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中包含标头目录

1 个答案:

答案 0 :(得分:0)

您在include_directories()中的路径可能不正确。您可以检查以下两件事

  1. 该文件似乎是tests-folder中的CMakeLists.txt,因此您需要先进入一个文件夹,然后才能进入src文件夹,即include_directories(../src/headers)

  2. #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_DIRCMAKE_SOURCE_DIR,例如include_directories(${CMAKE_SOURCE_DIR}/src/headers)