多年来我一直在使用CMake来构建我的Xcode项目。突然之间,也许在升级OSX(11.6)或升级Xcode(13.0,命令行工具13.0)之后,cmake不再工作了。
首先,让我给出一些我已经尝试过的事情,这样我就不会被提及一个回答的问题并被遗忘:
sudo xcode-select --reset
这没有效果。
我尝试手动重置 cmake 变量cmake .. -DCMAKE_C_COMPILER="/usr/bin/cc"
和其他路径。 它仍然在 CMakeError.log 中给出"编译 C 编译器标识源文件 'CMakeCCompilerId.c' 失败"。 我在我的系统中找不到的 c 编译器似乎可以工作,包括不同位置的 clang。
我尝试将环境变量 CC、CXX、CLANG 等重置为不同的路径。
这可能与我安装的Anaconda有关。
我创建了一个测试项目来查明问题所在。里面是主.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
和CMakeList.txt
cmake_minimum_required(VERSION 3.14)
project(untitled)
set(CMAKE_CXX_STANDARD 11)
add_executable(untitled main.cpp)
在我运行的构建子目录中
>>> cmake .. -G Xcode
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:2 (project):
No CMAKE_C_COMPILER could be found.
CMake Error at CMakeLists.txt:2 (project):
No CMAKE_CXX_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also "../Test/build/CMakeFiles/CMakeOutput.log".
See also "../Test/build/CMakeFiles/CMakeError.log".
CMakeFiles/CMakeError.log 的开头是:
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler:
Build flags: -march=core2;-mtune=haswell;-mssse3;-ftree-vectorize;-fPIC;-fPIE;-fstack-protector-strong;-O2;-pipe;-isystem;/opt/anaconda3/include
Id flags:
The output was:
65
Command line invocation:
/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
User defaults from command line:
IDEPackageSupportUseBuiltinSCM = YES
note: Using new build system
note: Planning
Analyze workspace
.
.
.
clang-10: error: invalid Darwin version number: macos11.3
clang-10: error: invalid version number in '-target x86_64-apple-macos11.3'
.
.
.
我设法解决了在CMakeLists.txt中设置一些变量的类似问题。然而,这不是一个确定的解决方案。它需要后续行动。
cmake_minimum_required(VERSION 3.14)
project(untitled)
set(CMAKE_C_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc")
set(CMAKE_CXX_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++")
set(CMAKE_CXX_STANDARD 11)
add_executable(untitled main.cpp)
==== 编辑 =====
按照这个想法,我设法解决了这个问题(这也是我这边的一个问题)。
Xcode 创建的变量 CC 和 CXX 存在问题。他们尝试做这样的事情:
xcrun -find cc
结果,在我这边是:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
这是一致的,如果我寻找那个编译器,它就存在。但是,它在CMake中不起作用。
我设法使这两个变量设置为它们指向的位置:
export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
export CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
之后,我设法使用 CMake 进行编译,而无需在 CMakeLists.txt 文件中设置变量。
您应该将这些导出添加到.bash_profile末尾