使用 cmake 构建 Xcode 项目时编译器出现问题



多年来我一直在使用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末尾

相关内容

  • 没有找到相关文章

最新更新