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]
答案 0 :(得分:0)
问题是使用
| abs n < abs d = (Result count, n)
。将include移至foo.cpp文件,并像这样向前声明# include "ui_foo.h"
:
Ui::FooBar
解决了它。