c++ - 按平台划分的 CMake 输出目录

标签 c++ cmake multiplatform

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

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

一些例子是:

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

关于c++ - 按平台划分的 CMake 输出目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38801817/

相关文章:

c++ - 围绕旋转点放置对象

c++ - SDL 3D 平台一致性

c++ - 如何用符合 C++ 核心准则的代码替换 C 风格的字符串解析?

c++ - 如何为要在 STL 数据结构中使用的任意结构实现运算符 <?

c++ - 编译器错误初始化 std::array of structs with clang

visual-studio - c使SOURCE_GROUP多个文件?

qt4 - 如何在 CMake 中正确链接到 QT4 库?

cmake - 相当于 'configure --prefix=DIR && make all install ' 的 CMake 是什么?

c++ - 用于 C++ 的高质量库

xamarin - 可部署到 IOS、Android 和 Windows Phone 的单一 MonoGame 代码库。