CMake-qt: Включая автогенерируемый файл из одноуровневого проекта. Как это сделать правильно? - PullRequest
0 голосов
/ 24 июня 2019

commonLib - это набор файлов, используемых для некоторых других целей, объявленных в папках-братьях, которые затем добавляются в родительский CMakeLists.txt с помощью add_subdirectory (). commonLib содержит foo.h и foo.ui (который переводится в ui_foo.h с помощью AUTOUIC)

otherLib включает foo.h из commonLib.

Такое ощущение, что я упускаю что-то очевидное.

Нужно ли использовать что-то вроде target_link_libraries? Могу ли я добавить автогенную папку commonLib во включаемые папки otherLib? (с target_include_directories (commonLib PRIVATE $ {AUTOGEN_FOLDER_OF_otherLib}))

Как мне убедиться, что commonLib автоматически сгенерирован раньше, чем otherLib?

Пожалуйста, дайте мне знать, если отсутствует информация для понимания проблемы.

Я использую cmake-converter для преобразования существующих файлов .sln в CMakeLists.txt.

Я предположил, что нашел успех с использованием целевых свойств, таких как: * AUTOGEN_TARGET_DEPENDS * AUTOGEN_BUILD_DIR

но я потерпел неудачу.

commonLib содержит следующий код:

find_package(Qt5 REQUIRED COMPONENTS Widgets)
set_target_properties(${PROJECT_NAME} PROPERTIES
    AUTOUIC ON
)

otherLib содержит следующий код:

add_dependencies(${PROJECT_NAME}
    commonLib
)

Я ожидал, что CMake успешно сгенерирует ui_foo.h из commonLib (что он на самом деле делает в папке commonLib_autogen / include_) и затем использует ui_foo.h для компиляции с otherLib.

Результирующее сообщение об ошибке:

d:\path\to\otherLib\../otherLib/foo.h(6): fatal error C1083: Cannot open include file: 'ui_foo.h': No such file or directory [D:\build_dir_of\otherLib\otherLib.vcxproj]

1 Ответ

0 голосов
/ 24 июня 2019

Проблема была в использовании

# include "ui_foo.h"

в шапке (foo.h). Перемещая include в файл foo.cpp и вперёд объявляя Ui::FooBar следующим образом:

namespace Ui { class FooBar; }

решил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...