Для моего исследовательского проекта я настраиваю проект (coom
) для сравнения набора алгоритмов в структуре данных. Для модульного тестирования я остановился на Bandit , что оставляет мне структуру проекта, которая выглядит следующим образом:
+ root
|-- CMakeLists.txt
|-+ external/
| \-- bandit/
|-+ src/
| |-- CMakeLists.txt
| |-- node.cpp
| \-- node.h
\-+ test/
|-- CMakeLists.txt
|-- test.cpp
\-- test_node.cpp
Из моего опыта работы с другими языками это кажется мне стандартной структурой проекта ? Папка test/
содержит модульные тесты для логики c в src/
и никакие зависимости не смешиваются с исходным кодом и тестовым кодом, а вместо этого находятся в external/
.
Файлы тестирования I хочу выглядеть следующим образом (с удаленными нерелевантными частями)
// test/test.cpp
#include <bandit/bandit.h>
(...)
#include "test_node.cpp"
int main(int argc, char* argv[]) {
(...)
}
// test/test_node.cpp
#include <coom/node.h>
(...)
Но моя проблема в том, что когда я пытаюсь скомпилировать с cmake ..
и последующими Makefile
, они не могу найти исходный код в src/
, где я получаю сообщение об ошибке компилятора:
fatal error: coom/node.h: No such file or directory.
Я ожидаю, что test/CMakeLists.txt
должен выглядеть примерно так:
# test/CMakeLists.txt
add_executable (test_unit test.cpp)
target_link_libraries(test_unit coom)
Я не могу понять, как настроить CMakeLists.txt
и src/CMakeLists.txt
, чтобы получить желаемый результат выше. В настоящее время они выглядят следующим образом:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project (coom VERSION 0.1)
# ============================================================================ #
# Dependencies
(...)
# ============================================================================ #
# COOM project
add_subdirectory (src)
add_subdirectory (test)
# src/CMakeLists.txt
# ============================================================================ #
# Link up files for the library
set(HEADERS
node.h
)
set(SOURCES
node.cpp
)
add_library(coom ${HEADERS} ${SOURCES})
Из других проектов я вижу, что каталог src/
можно связать с некоторым префиксом libname/
, но я не могу отличить их CMakeLists.txt
файлы, что я делаю не так. Я посмотрел на написание файла coom.pc.in
и предоставление цели install
и попытался set_target_properties
с FOLDER coom
или PREFIX coom
, но ни сработало. Я могу взломать include_directory(../src)
в test/CMakeLists.txt
, чтобы иметь возможность включить файл через #include <node.cpp>
, но это кричит, что я делаю что-то по своей сути неправильно.
Я на этом этапе очень сильно выдернуть мои волосы, и документация по CMake мне очень мало поможет.