仅将变量传递到子目录

时间:2015-06-22 16:32:13

标签: cmake

如何将项目特定变量传递到子目录?我想知道是否有一个"官员"这样做的方式:

# (CMAKE_BUILD_TYPE is one of None, Debug, Release, RelWithDebInfo)

# ...

# set specific build type for 'my_library'
set( CMAKE_BUILD_TYPE_COPY "${CMAKE_BUILD_TYPE}" )
set( CMAKE_BUILD_TYPE "Release" )
add_subdirectory( "my_library" )
set( CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_COPY} )

# continue with original build type
# ...

库/子目录my_library应该始终是类型为"Release"的buildt,主项目和其他子目录应该是由配置定义的类型构建的。我无法修改CMakeLists.txt的{​​{1}}。

1 个答案:

答案 0 :(得分:6)

在评论中回答修改后的问题(如何传递不同的值),以便CMAKE_BUILD_TYPE`以外的其他值:

没有额外的机器。如果变量是项目特定的,则只需设置变量:

    set(MYLIB_SOME_OPTION OFF)
    add_subdirectory(mylib)

如果它更通用,你需要还原它:

    set(BUILD_SHARED_LIBS_SAVED "${BUILD_SHARED_LIBS}")
    set(BUILD_SHARED_LIBS OFF)
    add_subdirectory(mylib)
    set(BUILD_SHARED_LIBS "${BUILD_SHARED_LIBS_SAVED}")

或者你可以把它放到一个函数中,你不需要恢复你改变的变量,因为函数有一个范围。