如何创建需要用户启用语言的目标?



我需要确保如果用户使用我的目标,

find_package(myproject)

他们启用了C++。CMake 为不同的语言提供了许多编译功能,但没有一个可以检查语言是否实际启用。目前,我的解决方案是要求编译器支持旧的C++标准:

target_compile_features(myproject INTERFACE cxx_std_98)

如果未启用C++,用户将看到消息

Cannot use features from non-enabled language CXX

这有望引导他们启用该语言。是否有更好的方法来使用导出的目标传播语言要求?

您的XXXConfig.cmake脚本可能仅在请求特定 COMPONENT 时添加C++必需的目标,并执行C++编译器检查,如该问题所示: 在 cmake 中检测项目语言

XXXConfig.cmake

# ... Generic things about Config file
# ... add `.cmake` EXPORT files *without* targets, required C++ compiler
if(CXX_LIB XXX_FIND_COMPONENTS)
# User requests C++-specific component of your package
get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
if("CXX" IN_LIST languages)
# C++ compiler is enabled
# ... add `.cmake` EXPORT files *with* C++-required targets.
else()
message(SEND_ERROR "CXX language should be enabled for use CXX_LIB component of XXX package")
endif()
endif()

调用此脚本时

find_package(XXX)

不会导出任何C++目标,也不会执行C++编译器检查。

但是调用

find_package(XXX COMPONENTS CXX_LIB)

将导出所有目标,并检查编译器C++。

最新更新