#qt #cmake #automocking
#qt #cmake #автоматическая блокировка
Вопрос:
Qt с CMake часто приводит к проблемам при компоновке.
После прочтения нескольких сообщений и попыток я обнаружил, что AUTOMOC принимает исходные файлы, указанные с add_executable
помощью, но игнорирует мои заголовочные файлы внутри включаемой папки, указанной с include_directories( inc )
помощью . После добавления заголовка, отправленного в add_executable
сборку, сборка прошла успешно.
Но каков правильный способ сообщить AUTOMOC файлы заголовков?
В моем CMake CMakeLists.txt Я использую
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories( inc )
set(QT5_MODULES Widgets)
find_package(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})
add_definitions( -DQT_NO_KEYWORDS
-DQT_CORE_LIB
-DQT_GUI_LIB
-DQT_WIDGETS_LIB
-DQT_NO_DEBUG
-DROSCONSOLE_BACKEND_LOG4CXX
-fPIC)
add_executable( MyGui
src/main.cpp
inc/gui.h src/gui.cpp )
ament_target_dependencies( MyGui )
qt5_use_modules(MyGui ${QT5_MODULES})
Комментарии:
1. если вы поместите заголовок в каталог src не как
add_executable
исходный файл, это сработает?2. Это также может быть изменено в более новой версии cmake. В документации Cmake 3 указано, что заголовочные файлы с тем же базовым именем автоматически анализируются для
QOBJECT
Makro. Какую версию cmake вы используете?3. Я запускаю CMake 3.5
4. И работает ли это, если у вас есть заголовок в каталоге src? Тогда похоже на ошибку или что cmake действительно не анализирует включаемые каталоги.
5. @Hayt Да. Я переместил файл .h в папку *src/ — и удалил запись on
add_executable
. Тогда это сработает. Но это разрушает идею разделения заголовков и источников.