Как написать мой CMakeLists.txt для этой необычной структуры заголовка? - PullRequest
2 голосов
/ 04 июля 2019

Я пытаюсь написать 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".

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