将几乎所有构建标志传递给CMake中的外部项目

时间:2014-04-21 19:15:35

标签: cmake

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

1 个答案:

答案 0 :(得分:2)

您可以在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