如何使使用 AUTOUIC 添加的包含目录可供下游目标使用?

Kni*_*chi 5 c++ qt cmake

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

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

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

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

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

小智 8

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

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}>
)
Run Code Online (Sandbox Code Playgroud)

看: