CMake-qt:包括来自兄弟项目的自动生成的文件。怎么做对?

时间:2019-06-24 08:20:33

标签: qt cmake

commonLib是用于同级文件夹中声明的一些其他目标的文件的集合,这些文件随后通过add_subdirectory()添加到父CMakeLists.txt中。 commonLib包含foo.h和foo.ui(AUTOUIC将其转换为ui_foo.h)

otherLib包括commonLib中的foo.h。

感觉我缺少明显的东西。

是否有必要使用诸如target_link_libraries之类的东西? 我可以将commonLib的autogen文件夹添加到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从commonLib(实际上在commonLib_autogen / include_文件夹中确实完成)成功生成ui_foo.h,然后使用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 :(得分:0)

问题是使用

| abs n < abs d = (Result count, n)

标题(foo.h)中的

。将include移至foo.cpp文件,并像这样向前声明# include "ui_foo.h"

Ui::FooBar

解决了它。