我有一个my-library/带有自定义目标的独立库,它通过外部命令生成一些标头。为了将包含这些标头的目录从父目录导出为消耗品,我想执行以下操作:
add_custom_target(my-target ALL
COMMAND ...
)
target_include_directories(my-target
INTERFACE my_include_directory/
)
并从父项目中使用它:
add_subdirectory(my-library)
add_executable(consumer ...)
add_dependencies(consumer my-target)
这在语义上对我my_include_directory/来说是正常的,并且对consumer. 然而,这会导致:
target_include_directories called with non-compliant target type
我能想出的最佳解决方案是将库中的包含目录作为变量导出:
add_custom_target(my-target ALL
COMMAND ...
)
set(MY_TARGET_INCLUDE_DIRS my_include_directory/ PARENT_SCOPE)
并通过此变量使用包含目录:
add_subdirectory(my-library)
add_executable(consumer ...)
add_dependencies(consumer my-target)
target_include_directories(consumer PRIVATE ${MY_TARGET_INCLUDE_DIRS})
这并不理想。有更好的解决方案还是我看错了?