Как добавить include_directory в простой проект CMake - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть проект 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 так же, как и для тестирования определенных там функций.Поэтому я # включил "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)

Но make завершается ошибкой с сообщением об ошибке фатальная ошибка: headers / utility.h: нет такого файла или каталога. Как включить каталог заголовков в test_me.cpp

1 Ответ

0 голосов
/ 29 сентября 2018

Ваш путь в include_directories() может быть неправильным.Вот две вещи, которые вы можете проверить

  1. Этот файл выглядит как CMakeLists.txt в тестовой папке, поэтому вам нужно перейти в одну папку, прежде чем вы сможете перейти в src-folder,т.е. include_directories(../src/headers).

  2. Вы повторяете папку заголовков в #include "headers/utility.h", когда вы уже указали ее в include_directories(src/headers).Либо используйте #include "utility.h" в cpp-файле или include_directories(src) в CMakeLists.txt.

Другой вариант заключается в том, что вам не нужно указывать папку заголовков в 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...