#cpp #qt #qt5 #cmake #qt_designer
Нужно ли добавлять .ui файлы в список исходников cmake? То есть писать add_executable(my_target main.cpp main.h main.ui) или add_executable(my_target main.cpp main.h) ?
Ответы
Ответ 1
Как уже написали, в add_executable указывать *.ui-файлы не обязательно. При включённом set(CMAKE_AUTOUIC ON) cmake сам просмотрит все *.cpp файлы на предмет наличия в них include'ов вида ui_*.h и сам обработает соответствующие *.ui файлы. При сборке без AUTOUIC (по каким-либо причинам), .ui файл необходимо передать макросу qt5_wrap_ui(), который явно создаст команду для сборки ui_*.h, а хедер уже сам подтянется по зависимостям к исходнику, который его включает. С другой стороны это не ошибка, add_executable (и прочие) допускают указание в списке исходников файлы, которые непосредственно не участвуют в сборке; в данном случае они не добавляются в качестве зависимости к конкретной цели. Обычно мотивацией к этому является использование IDE. В этом случае проект для оной, сгенерированный cmake, будет включать их в качестве «дополнительных исходников», и они будут отображаться в списке файлов связанных с целью наряду с остальными. Также, человек, поддерживающий проект, может захотеть указать их просто «для себя», чтобы было явно видно при сборке какого файла используется конкретный ui.Ответ 2
ui файлы не нужно перечислять в add_executable или add_library - это лишено смысла. Эти файлы обрабатываются с помощью uic, так что это он должен знать о том, где искать эти файлы (именно искать). Если ui файлы находяться в тоже директории, то все норм, а если в другой, то нужно установть опцию: set(CMAKE_AUTOUIC_SEARCH_PATHS "paht/to/uic/files")Ответ 3
На сегодняшний день я не слышал о прямой поддержке .ui файлов в add_executable(). В этой команде перечисляются лишь исходники, которые CMake умеет "собирать" - .c,.cpp,.h,.o,.asm. Файлы .ui обрабатываются специальным макросом qt5_wrap_ui() из модуля Qt5Widgets. См. документацию.
Комментариев нет:
Отправить комментарий