Основываясь на этом ответе stackoverflow на аналогичный вопрос ( Cmake включает цель только заголовок из цели только заголовок ), я создаю библиотеку только заголовок и пытаюсь использовать ее в исполняемом файле.
Моя структура папок ниже:
├── CMakeLists.txt // root folder CMake file
├── srcs // this is the hdr only library
│ ├── src1.hpp
│ ├── CMakeLists.txt
│ ├── src2.hpp
│ └── src3.hpp
│ └── ...
└── test // this is the executable project
├── CMakeLists.txt
└── main.cpp
Корневой уровень CMakeLists.txt
cmake_minimum_required(VERSION 3.13)
project (MyProj CXX)
add_subdirectory(srcs)
add_subdirectory(test)
уровень src CMakeLists.txt (только для библиотеки заголовков)
add_library(MyLib INTERFACE)
target_sources(MyLib INTERFACE
"${CMAKE_CURRENT_SOURCE_DIR}/src1.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src2.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src3.hpp"
)
target_include_directories(MyLib
INTERFACE ${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(plugins)
CMake-файл для исполняемого тестового проекта
add_executable(MyTest main.cpp)
target_sources(MyTest
PRIVATE main.cpp
)
target_include_directories(MyTest PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_libraries(MyTest PUBLIC MyLib)
Хотя это настраивает cmake без предупреждений / ошибок, запуск make завершается неудачно, указывая на то, что исполняемый проект не может найти заголовочный файл (ы) из библиотеки.
/ ... / nettu2 / test / main.cpp: 6: 10: фатальная ошибка: src1.hpp: нет такого
файл или каталог #include "src1.hpp"
^ ~~~~~~~~~~~~~~~ Компиляция прекращена. test / CMakeFiles / MyTest.dir / build.make: 62: рецепт для цели
'test / CMakeFiles / MyTest.dir / main.cpp.o' не удалось сделать [2]: *
[test / CMakeFiles / MyTest.dir / main.cpp.o] Ошибка 1
CMakeFiles / Makefile2: 126: рецепт для цели
«test / CMakeFiles / MyTest.dir / all» не удалось сделать [1]: *
[test / CMakeFiles / MyTest.dir / all] Ошибка 2 Makefile: 129: рецепт для
цель 'all' не выполнена make: *** [all] Ошибка 2
Я уверен, что мне здесь не хватает какой-то важной, но тривиальной вещи, но все же не могу понять, что здесь происходит не так. Как я могу заставить эту сборку работать?