按平台划分的 CMake 输出目录

CMake output directory by platform

我想根据 platform/compiler/architecture/configuration 将我的库输出到不同的文件夹中,因此它应该如下所示:

平台(架构)-编译器(版本)-配置

举几个例子:

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

我真的不知道如何生成这些,谁能指导我吗? 谢谢

一种方法是 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 定义的值转换为您正在寻找的特定值。