CMAKE返回CMAKE_HOST_SYSTEM_PROCESSOR,在apple M2 CPU上使用x86_64

cbjzeqam  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(145)

当我在apple M2 CPU上运行时(使用cmake版本3.23.0),我得到CMAKE_HOST_SYSTEM_PROCESSOR返回值x86_64(为什么不是arm 64)
系统信息和cmake版本如下:

╰─➤  uname -a
Darwin Kernel Version 22.6.0: Wed Jul  5 22:17:35 PDT 2023; root:xnu-8796.141.3~6/RELEASE_ARM64_T8112 arm64
╭─ ‹master*›
╰─➤  cmake --version                                                                                                      
cmake version 3.23.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).

此外,编译和链接时,它会自动添加标志:“-arch x86_64 -isysroot /Library/Developer/CommandLineTools/SDK/MacOSX13.3.sdk”
使VERBOSE=1打印日志如下:

/Library/Developer/CommandLineTools/usr/bin/c++  -arch x86_64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names -L/usr/local/opt/[email protected]/lib "CMakeFiles/arch-dependent.dir/arch-dependent.cpp.o" -o arch-dependent

这是一个测试程序:

╰─➤  cat ../CMakeLists.txt
project(test)

message("CMAKE_HOST_SYSTEM_PROCESSOR: ${CMAKE_HOST_SYSTEM_PROCESSOR}")

add_executable(test test.cpp)

╰─➤  cmake ..
CMAKE_HOST_SYSTEM_PROCESSOR: x86_64
-- Configuring done
-- Generating done
...

╰─➤  make VERBOSE=1
...
/Library/Developer/CommandLineTools/usr/bin/make  -f CMakeFiles/test.dir/build.make CMakeFiles/test.dir/build
[ 50%] Building CXX object CMakeFiles/test.dir/test.cpp.o
/Library/Developer/CommandLineTools/usr/bin/c++   -arch x86_64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -MD -MT CMakeFiles/test.dir/test.cpp.o -MF CMakeFiles/test.dir/test.cpp.o.d -o CMakeFiles/test.dir/test.cpp.o -c /home/arvin/test/test.cpp
[100%] Linking CXX executable test
/usr/local/Cellar/cmake/3.23.0/bin/cmake -E cmake_link_script CMakeFiles/test.dir/link.txt --verbose=1
/Library/Developer/CommandLineTools/usr/bin/c++  -arch x86_64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names -L/usr/local/opt/[email protected]/lib CMakeFiles/test.dir/test.cpp.o -o test
...

1.我可以用set(CMAKE_OSX_ARCHITECTURES arm64)把x86_64改成arm 64,但是我想知道问题出在哪里。
1.虽然我可以添加“-Wno-unused-command-line-argument”来屏蔽这些自动添加的标志,但我确实想从根目录中删除。
非常感谢

ecr0jaav

ecr0jaav1#

您看到的CMAKE_HOST_SYSTEM_PROCESSOR=x86_64是因为您使用的CMake版本是Intel版本,而不是arm64或通用二进制文件。
例如,我的CMake from https://cmake.org/download/显示

$ file /Applications/CMake.app/Contents/bin/cmake 
/Applications/CMake.app/Contents/bin/cmake: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64]
/Applications/CMake.app/Contents/bin/cmake (for architecture x86_64):   Mach-O 64-bit executable x86_64
/Applications/CMake.app/Contents/bin/cmake (for architecture arm64):    Mach-O 64-bit executable arm64

因此,在AppleSilicon Mac上运行时,它将默认为arm64

$ /Applications/CMake.app/Contents/bin/cmake --fresh .
...
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMAKE_HOST_SYSTEM_PROCESSOR: arm64
-- Configuring done (0.4s)
-- Generating done (0.0s)

但如果你强制它以Intel二进制运行:

$ arch -arch x86_64 /Applications/CMake.app/Contents/bin/cmake --fresh .
...
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMAKE_HOST_SYSTEM_PROCESSOR: x86_64
-- Configuring done (1.0s)
-- Generating done (0.0s)

因此,默认情况下,CMake将使用CMAKE_HOST_SYSTEM_PROCESSOR作为CMAKE_OSX_ARCHITECTURES。如果要生成通用二进制文件,建议的设置为:
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")

相关问题