【问题标题】:CMake output directory by platformCMake 按平台输出目录
【发布时间】:2016-08-06 07:43:04
【问题描述】:

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

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

举几个例子:

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

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

【问题讨论】:

  • 只需创建这些输出目录并在其中编译您的源代码。
  • 但是如何用 CMake 做到这一点?我只需要那些文件夹中的输出(.lib/.a),别无其他

标签: c++ cmake multiplatform


【解决方案1】:

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

【讨论】:

  • 哇,这太棒了!非常感谢,效果很好
  • 我的笔记本电脑上没有安装 CMake,所以我没有检查语法并且有几个小错误 - 我现在已经修复了!
猜你喜欢
  • 2013-09-20
  • 1970-01-01
  • 2011-04-14
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多