2015-11-07 3 views
3

Я пытаюсь представить себя cmake. Я использую его в окнах для создания MinGW Makefiles.Как включить заголовки в cmake

Я привык иметь заголовок и исходный файл классов C++ в том же каталоге и каталоги, организованные модулями.

Я хотел бы, чтобы моя конфигурация cmake имела любую зависимость cpp от соответствующего h-файла. Кроме того, я хотел бы, чтобы h и cpp всегда существовали в одном каталоге.

Из того, что я прочитал, в cmake, в моей строке add_executable, я перечисляю все файлы cpp, которые я хочу скомпилировать.

Если у меня есть src/module1/myclass.cpp, указанный в моей строке add_executable, где будет cmake искать myclass.h, если myclass.cpp перечисляет #include? Будет ли myclass.cpp зависимым от myclass.h? Это поведение, которое я бы хотел.

+1

Если вы # включите заголовочный файл, он будет зависеть; вам не нужно ничего делать в своих CMakeLists. Имея файл заголовка в том же каталоге, что и cpp, как вы хотите, убедитесь, что он найден, поэтому вам не нужно путаться с путями поиска заголовков. –

+2

Дубликат этого http://stackoverflow.com/questions/33578594/cmake-does-not-include-sub-directory-when-building/33578725#33578725? – fghj

ответ

2

Я хотел бы, чтобы моя конфигурация cmake имела любую зависимость cpp от соответствующего h-файла.

CMake автоматически определит зависимости между вашими файлами cpp и h. Он делает это, используя ваши инструменты построения платформы. Например, он знает, как сообщать gcc о создании файлов зависимостей, а затем обрабатывать этот файл. На других платформах, таких как Visual Studio, CMake знает, как сказать cl.exe для вывода зависимостей заголовков, и он также может анализировать этот вывод.

Вам не нужно ничего делать, чтобы CMake правильно обрабатывал зависимости вашего заголовка. Все, что вам нужно сделать, это убедиться, что заголовки найдены во время компиляции.

Если я ЦСИ/module1/myclass.cpp перечислены в моей add_executable линии, где будет Cmake ищет myclass.h, если списки myclass.cpp #include?

компилятор будет искать в своих местах по умолчанию, и вы можете настроить дополнительные пути поиска, выполнив команду include_directories(...) (установить их для всего файла CMakeLists.txt) или запустив target_include_directories(your_executable_target ...), чтобы установить их для только одного исполняемый файл.

Если файлы заголовки все хранятся вместе с CPP файлов, и вы даете #include относительных путей от места каст файла (и использовать #include "..." вместо #include <...>), то вам не нужно настроить поиск заголовка путь: все компиляторы что я знаю, что поиск по отношению к файлу cpp по умолчанию.

Смежные вопросы