当我在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”来屏蔽这些自动添加的标志,但我确实想从根目录中删除。
非常感谢
1条答案
按热度按时间ecr0jaav1#
您看到的
CMAKE_HOST_SYSTEM_PROCESSOR=x86_64
是因为您使用的CMake版本是Intel版本,而不是arm64
或通用二进制文件。例如,我的CMake from https://cmake.org/download/显示
因此,在AppleSilicon Mac上运行时,它将默认为
arm64
:但如果你强制它以Intel二进制运行:
因此,默认情况下,CMake将使用
CMAKE_HOST_SYSTEM_PROCESSOR
作为CMAKE_OSX_ARCHITECTURES
。如果要生成通用二进制文件,建议的设置为:set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")