各平台下的CMake输出目录

3
我希望能够根据平台/编译器/架构/配置将我的库输出到不同的文件夹中,应该看起来像这样:

platform(arch)-compiler(version)-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

我实际上不知道如何生成它们,有人能指导一下吗?谢谢


只需创建这些输出目录并在其中编译您的源代码即可。 - Michał Walenciak
但是如何使用CMake实现呢?我只需要在这些文件夹中输出(.lib/.a),不需要其他的。 - Alex
1个回答

3

一种方法是为项目设置bin目录:

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变量列表,了解特定平台的配置信息列表。然后,您需要应用一些逻辑来将 CMake 定义的值转换为您要查找的具体值。


哇,这非常棒!非常感谢您,它运行得非常好。 - Alex
1
我在笔记本电脑上没有安装CMake,所以我没有检查语法,有一些小错误 - 现在我已经修复了! - Adam Bowen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接