按平台CMake输出目录

时间:2016-08-06 07:43:04

标签: c++ cmake multiplatform

我想根据平台/编译器/架构/配置将我的库输出到不同的文件夹中,所以它应该如下所示:

平台(ARCH)-compiler(版本) - 构型

一些例子是:

win32-vc12.0-debug
win32-vc12.0-release
win64-vc14.0-debug
win64-vc14.0-release

unix-gcc6.1-debug
unix-gcc6.1-release
unix-clang3.8-debug
unix-clang3.8-release

我实际上不知道如何生成这些,有人可以指导我吗? 谢谢

1 个答案:

答案 0 :(得分:3)

项目的一种方式是set the bin directories

math(EXPR platform_bits "${CMAKE_SIZEOF_VOID_P} * 8")
set(platform_dir ${CMAKE_SYSTEM_NAME}${platform_bits}-${CMAKE_CXX_COMPILER_ID}${CMAKE_CXX_COMPILER_VERSION})

foreach(config DEBUG RELEASE RELWITHDEBINFO MINSIZEREL)

    foreach(var CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${config} CMAKE_LIBRARY_OUTPUT_DIRECTORY_${config} CMAKE_RUNTIME_OUTPUT_DIRECTORY_${config})
        set(${var} "${CMAKE_BINARY_DIR}/${platform_dir}-${config}")
        string(TOLOWER "${${var}}" ${var})
    endforeach()

endforeach()

这不会为您提供您正在寻找的确切目录名称,但这是一个良好的开端。您可以查看CMake variables list以获取特定于平台的配置信息列表。然后,您需要应用一些逻辑,将CMake定义的值转换为您正在寻找的特定值。