Я изучаю 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? Почему этот дополнительный файл не нужен, если содержимое указанного каталога находится на корневом уровне?
include_directories()
используется для добавления заголовков путей поиска (-I
флаг) и add_subdirectory()
не будет иметь никакого значения в этом случае.
Я полагаю, вам нужно перечислить файлы * .cpp из папки gen-cpp в add_executable()
или же add_library()
звонки, в которых вы хотите, чтобы эти символы были.
Кроме того, вы можете скомпилировать все экономичные источники в библиотеку и связать ее с вашим кодом.
Других решений пока нет …