CMake Разница между include_directories и add_subdirectory?

Я изучаю CMake для создания кода C ++ и борюсь со следующей концепцией. В моем корневом каталоге у меня есть несколько файлов cpp и CMakeLists.txt, который успешно генерирует некоторый код в каталоге gen-cpp. Мой корневой уровень CMakeLists.txt содержит:

include_directories ( «путь к корню» / ген-CPP). (вместе с соответствующей комиссионной автогенерацией и включает в себя.

Все компилируется нормально, но я получаю связанные с динамической библиотекой ошибки времени выполнения для неопределенного символа, ссылающегося на класс, определенный в каталоге gen-cpp. Когда я перемещаю файлы в каталоге на корневой уровень, он работает нормально. что мне не хватает? (Я также настроил #include в директориях cpp корневого уровня, чтобы он указывал на «путь к корню» / gen-cpp).

Это неправильное понимание использования include_directory, где я должен использовать add_subdirectory. Если последнее, понадобится ли коду в gen-cpp свой собственный CMakeLists.txt? Почему этот дополнительный файл не нужен, если содержимое указанного каталога находится на корневом уровне?

18

Решение

include_directories() используется для добавления заголовков путей поиска (-I флаг) и add_subdirectory() не будет иметь никакого значения в этом случае.

Я полагаю, вам нужно перечислить файлы * .cpp из папки gen-cpp в add_executable() или же add_library() звонки, в которых вы хотите, чтобы эти символы были.

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

9

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector