我需要确保如果用户使用我的目标,
find_package(myproject)
他们启用了C ++。 CMake为不同语言提供了许多编译功能,但没有检查语言是否实际启用。目前,我的解决方案是要求编译器支持旧的C ++标准:
target_compile_features(myproject INTERFACE cxx_std_98)
如果未启用C ++,则用户会看到消息
Cannot use features from non-enabled language CXX
希望能引导他们启用该语言。有没有更好的方法来传播语言要求与导出的目标?
答案 0 :(得分:1)
您的XXXConfig.cmake
脚本可能只在请求特定的COMPONENT时添加C ++ - 必需的目标,并执行C ++编译器的检查,如该问题:Detect project language in 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 ++编译器。