Я пытаюсь написать CMakeLists.txt
для моего проекта на C ++, который зависит от нескольких сторонних библиотек.Одна из библиотек следует необычной схеме (для меня) при включении заголовочных файлов, как описано ниже.
Мой код структурирован как:
project/
- CMakeLists.txt
- src/
- main.cpp
- lib/
- CMakeLists.txt
- moduleA/
-CMakeLists.txt
- fooA.cpp
- fooA.h
- barA.cpp
- barA.h
- moduleB/
- CMakeLists.txt
- fooB.cpp
- fooB.h
moduleA
зависит от moduleB
,и, кроме того, fooA
также зависит от barA
.Проблема с include
заявлениями fooA.cpp
и barA.cpp
:
// fooA.cpp
#include "moduleA/fooA.h"
#include "moduleA/barA.h"
...
Аналогично для barA.cpp
.Когда я запускаю make
после cmake
, он жалуется, что не может найти moduleA/fooA.h
во время компиляции fooA.cpp
.Я не уверен, как включить файлы в moduleA
, или в какие CMakeLists.txt
я должен включить их.moduleB
компилируется правильно.Я не могу изменить код библиотек, но я могу добавить cmake
файлов.
Мои CMakeLists.txt
в lib
и CMakeLists.txt
в moduleA
выглядят следующим образом.
# lib/CMakeLists.txt
cmake_minimum_required(VERSION 3.1...3.14)
project(mylibs VERSION 1.0.0 LANGUAGES CXX)
add_subdirectory(moduleA)
add_subdirectory(moduleB)
#moduleA/CMakeLists.txt
cmake_minimum_required(VERSION 3.1...3.14)
project(moduleA VERSION 1.0.0 LANGUAGES CXX)
set (SOURCES fooA.cpp barA.cpp)
set (HEADERS fooA.h barA.h)
add_library(moduleA STATIC ${SOURCES} ${HEADERS})
target_link_libraries(moduleA PUBLIC moduleB)
Ошибка, по существу, компилятор не находит moduleA
заголовки, при компиляции исходного кода moduleA
, поскольку исходные файлы moduleA
содержат заголовки в том же каталоге необычным (для меня) образом, #include "moduleA/header"
.