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

时间:2018-05-24 20:52:53

标签: cmake

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

find_package(myproject)

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

target_compile_features(myproject INTERFACE cxx_std_98)

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

Cannot use features from non-enabled language CXX

希望能引导他们启用该语言。有没有更好的方法来传播语言要求与导出的目标?

1 个答案:

答案 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 ++编译器。