【问题标题】:Passing nearly all build flags to an external project in CMake将几乎所有构建标志传递给 CMake 中的外部项目
【发布时间】:2014-06-05 22:06:26
【问题描述】:

是否有一种简洁的方法可以将几乎所有构建标志传递给 CMake 中的外部项目?本质上,我有一个使用 ExternalProject_Add 的项目来下载和编译外部 CMake 项目。在一个特定平台上,我需要将大多数构建标志(如 CMAKE_OBJCOPY、CMAKE_OBJDUMP、CMAKE_RANLIB 等)修改为系统默认值以外的其他内容。现在,当我为调用 ExternalProject_Add 的父项目执行此操作时,我还想将这些选项传递给外部项目。当然,我可以通过在 ExternalProject_Add 中设置 CMAKE_ARGS 选项来做到这一点,但是要复制很多标志。真的,我正在寻找一个复制所有标志然后允许我覆盖一些标志的选项。最后一点,由于我使用 ExternalProject_Add 下载档案,我一直犹豫使用 add_subdirectory,它会复制所有标志,因为我不能提供 URL。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您可以在 cmake 工具链文件中列出您需要的所有标志并仅传递给ExternalProject_Add 一个选项:CMAKE_TOOLCHAIN_FILE

    > cat CMakeLists.txt
    cmake_minimum_required(VERSION 2.8)
    project(Foo)
    
    message("SOME_ARG1: ${SOME_ARG1}")
    message("SOME_ARG2: ${SOME_ARG2}")
    
    > cat MyToolchain.cmake
    set(SOME_ARG1 "arg1")
    set(SOME_ARG2 "arg2")
    
    > cmake -H. -B_builds/notoolchain
    ...
    -- Detecting CXX compiler ABI info - done
    SOME_ARG1:
    SOME_ARG2:
    -- Configuring done
    
    > cmake -H. -B_builds/toolchain -DCMAKE_TOOLCHAIN_FILE=MyToolchain.cmake
    ...
    -- Detecting CXX compiler ABI info - done
    SOME_ARG1: arg1
    SOME_ARG2: arg2
    -- Configuring done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多