【问题标题】:How to propagate conan's compiler.cppstd setting to the compiler when building a library with CMake?使用 CMake 构建库时如何将柯南的 compiler.cppstd 设置传播到编译器?
【发布时间】:2022-02-17 22:15:36
【问题描述】:

如果您使用柯南构建库并将 compiler.cppstd 设置设置为例如20 并调用 conan install,库仍然使用给定编译器的默认标准构建。

The docs说:

消费者提供的compiler.cppstd的值被构建助手使用:

  • CMake 构建助手将设置 CONAN_CMAKE_CXX_STANDARD 和 CONAN_CMAKE_CXX_EXTENSIONS 定义,这些定义将转换为相应的 CMake 变量,以使用 conan_basic_setup() 宏自动激活标准。

看来您需要致电conan_basic_setup() 来激活此设置。但我怎么称呼它?通过修补库的 CMakeLists.txt?我当然不想仅仅为了使用正确的标准版本而这样做。我可以看到一些基于设置手动设置 CMake 定义的食谱,例如:

但这也感觉像是一种黑客行为。那么确保库是使用我指定的compiler.cppstd 构建的正确方法是什么?

【问题讨论】:

    标签: c++ cmake conan


    【解决方案1】:

    避免打补丁,它既丑陋又脆弱,对于每个新版本,由于上游的更改,您都需要更新。

    主要方法是使用 CMakeLists.txt 作为包装器,例如:https://github.com/conan-io/conan-center-index/blob/5f77986125ee05c4833b0946589b03b751bf634a/recipes/proposal/all/CMakeLists.txt 等等。

    cmake_minimum_required(VERSION 3.1)
    project(cmake_wrapper)
    
    include(conanbuildinfo.cmake)
    conan_basic_setup(KEEP_RPATHS)
    
    add_subdirectory(source_subfolder)
    

    这里重要的是包括conanbuildinfo.cmake,它是由cmake柯南生成器生成的,然后CMake助手将完成剩下的工作。

    这里的source_subfolder是项目源文件夹,配置完所有柯南设置后会加载主CMakeLists.txt。

    【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多