qt - CMake-qt:包括来自同级项目的自动生成文件。怎么做才对?
问题描述
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 成功生成 ui_foo.h(它实际上是在文件夹 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]
解决方案
问题是使用
# include "ui_foo.h"
在标题(foo.h)中。将包含移动到 foo.cpp 文件并转发声明Ui::FooBar
如下:
namespace Ui { class FooBar; }
解决了它。
推荐阅读
- python - 最小二乘法给出错误的高度,LLA 到 ECEF 到 Python 中的 LLA
- r - R geom_bar facet_grid 垂直而不是水平
- json - CURL 语法错误
- javascript - 如何使用 ajax 调用 food2fork?
- html - 有人能告诉我为什么我的轮播导致我所有的文本元素都移动了吗?
- javascript - Qml上传文件(路径)
- oauth - JWT 令牌的一些“不验证发行者的后果”可能是什么?
- python - LSTM:将编码器的隐藏状态添加到解码器以提高性能
- json - 如何从Json文件中提取信息。必须通过类型映射Json结构并使用AESON
- codenameone - 代号一 android 构建失败