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]