c++ - 如何使使用 AUTOUIC 添加的包含目录可用于下游目标?

标签 c++ qt cmake

我的 qt 项目中的 CMake 的 AUTOUIC 选项有问题。

我有一个包含 *.ui qt-form 文件的目标,并将其更改为使用 AUTOUIC 选项自动生成相应的 ui_*.h 文件并将它们的位置添加到目标的包含目录中。

问题是,我将生成的“ui_*.h”文件包含在目标的 header 中,然后将其包含在另一个测试目标中。然而,测试目标没有将生成的文件设置为其包含目录的目录,因此将找不到 ui_*.h 文件。

那么有什么方法可以获取生成文件的目录,以便我可以将它添加到我的第一个目标的 INTERFACE_INCLUDE_DIRECTORIES 中。当我使用硬编码名称执行此操作时,它解决了我的编译错误,但我宁愿通过从某个目标属性左右获取该目录来执行此操作。我失败了,因为似乎只有在处理完所有 CMakeLists 文件后才添加 AUTOUIC 包含目录。

顺便说一句,我目前使用的是 CMake 3.8.2,但如果问题已经解决,可以选择更新到 3.9。

最佳答案

从 CMake 版本 3.9 开始,您可以使用以下代码片段将自动生成的 header 添加到目标的构建接口(interface)包含目录:

get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(_isMultiConfig)
  set(AUTOGEN_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}_autogen/include_$<CONFIG>)
else()
  set(AUTOGEN_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}_autogen/include)
endif()

target_include_directories(${TARGET_NAME} INTERFACE
  $<BUILD_INTERFACE:${AUTOGEN_INCLUDE_DIR}>
)

参见:

关于c++ - 如何使使用 AUTOUIC 添加的包含目录可用于下游目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44746308/

相关文章:

c++ - cmake编译组

c++ - 如何在构建我的 clang 插件时绕过依赖构建?

c++ - 为什么计数器递增?

c++ - Qt/QML/OpenGL : Z-ordering doesn't work with semi-transparent items with OpenGL under QML

qt - 如何指示 cmake/automoc 查找外部 header

c++ - 图标可以在 QMessageBox 中以文本为中心吗?

c++ - 使用 SIGSEGV 初始化类成员应用程序崩溃后

C++ 运算符重载

c++ - 多重继承和数据成员

c++ - 稀疏建模软件编译错误