首页 > 解决方案 > CMake Universal Binary - 取决于编译选项

问题描述

我正在使用set (CMAKE_OSX_ARCHITECTURES arm64 x86_64)- 构建一个 MacOS 通用二进制文件 - 到目前为止工作正常。

但是 x86_64 应该有除 arm64 之外的其他编译选项。

有没有类似的东西:

if (CURRENT_TARGET MATCHES x86_64)
    add_compile_options (-Wall -Ofast -ffast-math -fno-exceptions)
else()
    add_compile_options (-Wall -O3 -fno-exceptions)
endif()

或者任何其他解决方案?

标签: cmakeuniversal-binary

解决方案


您可以通过该XCODE_ATTRIBUTE_*属性执行此操作,但不幸的是,这会将您的项目绑定到 XCode。如果您有一个my_target要添加多架构特定标志的目标,您可以编写:

cmake_minimum_required(VERSION 3.20)
project(example)

add_executable(my_target main.cpp)
set_target_properties(
  my_target
  PROPERTIES
    XCODE_ATTRIBUTE_PER_ARCH_CFLAGS_x86_64 "-DBUILDING_FOR_X86_64"
    XCODE_ATTRIBUTE_PER_ARCH_CFLAGS_arm64 "-DBUILDING_FOR_ARM64"
)

然后你会建立:

$ cmake -G Xcode -S . -B build -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
$ cmake --build build --config Release

推荐阅读