CMake: добавление видимости IDE для общих заголовков в мультибиблиотечном / бинарном проекте C ++ - PullRequest
0 голосов
/ 20 марта 2019

ПРИМЕЧАНИЕ. Этот вопрос относится к тому, чтобы заголовки отображались в IDE, , а не , просто чтобы они были включены в сборку.Последнее здесь не проблема.

У меня есть проект, который выглядит в основном так, и я пытаюсь преобразовать его систему сборки в CMake:

project/
  include/
     common/
        common1.hpp
        common2.hpp
        ...
     lib1/
        file1_1.hpp
        file1_2.hpp
        ...
     lib2/
        file2_1.hpp
        file2_2.hpp
        ...
     ...
     bin1/
        ...
  src/
     CMakeLists.txt (project)
     lib1/
        file1_1.cpp
        file1_2.cpp
        ...
        CMakeLists.txt (add_library)
     lib2/
        file2_1.cpp
        file2_2.cpp
        ...
        CMakeLists.txt (add_library)
     ...
     bin1/
        main.cpp
        ...
        CMakeLists.txt (add_executable)

В каждом листовом каталогеCMakeLists.txt, я включаю соответствующие файлы заголовков в команду add_library() или add_executable(), для максимальной совместимости с IDE.

Мой вопрос: как мне поменять CMake, чтобы получить небиблиотечныйкакие заголовки под common/ также отображаются в IDE?

Мой текущий план состоит в том, чтобы просто назначить каждый из них библиотеке / двоичному файлу, который использует их наиболее часто, но это неудовлетворительно.Я также не уверен, что это в конечном итоге сделает с презентацией структуры проекта в различных IDE;было бы лучше, если бы он несколько отражал физическое расположение файлов.

Обратите внимание, что я в настоящее время застрял с использованием CMake 2.8.12.2, поэтому многие функции только для 3.x не подойдут для меня.

1 Ответ

1 голос
/ 25 марта 2019

Похоже, это в основном дубликат проекта QtCreator CMake - как показать все файлы проекта

Следуя принятому решению , я создал подкаталогв исходном дереве только с CMakeLists.txt, который содержит что-то вроде следующего:

set(HEADERS
   ${MY_INCLUDE_DIR}/common/common1.hpp
   ${MY_INCLUDE_DIR}/common/common2.hpp
   ...
)

add_custom_target(common SOURCES ${HEADERS})

Ключевое слово SOURCES в команде add_custom_target() сообщает CMake, что это файлы кода, которые не создаются напрямую.но необходимо добавить в проект для видимости IDE.

Документация: https://cmake.org/cmake/help/latest/command/add_custom_target.html

...