我的目标是为我的 cmake 命令设置别名,以便它专门使用我的 llvm 自制安装,而不是 Xcode 安装的套件。我也想保留系统默认值。我在 Catalina 上使用最新的 Xcode 和 homebrew llvm。
我的第一步是使用自制的 clang++ 和 libc++,我可以手动完成
/usr/local/opt/llvm/bin/clang++ -Wall -Wextra -std=c++17 -stdlib=libc++ \
-nostdinc++ -I/usr/local/opt/llvm/include/c++/v1 \
-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib \
main.cc
Run Code Online (Sandbox Code Playgroud)
为了完整起见,这是我的 CMakeLists.txt;它非常准系统,因为我想做的大部分工作不属于 CMakeLists.txt,我只是想编译一个玩具程序。
cmake_minimum_required(VERSION 3.15)
project(test)
set(CMAKE_CXX_STANDARD 17)
add_executable(test
main.cc)
Run Code Online (Sandbox Code Playgroud)
但我已经被 cmake 困住了。我可以使用
-DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++
C/clang 指定编译器。我也在使用CMAKE_PREFIX_PATH
,但是当我打开build.ninja
文件时,我仍然看到它引用 Xcode 目录。添加 aCMAKE_IGNORE_PATH
似乎并没有让它真正忽略 /Applications/Xcode.app。
我还尝试将标志CMAKE_CXX_STANDARD_LIBRARIES
和添加CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
到我的 cmake 命令中,但如果我这样做,我开始出现链接器错误(我相信仍然使用系统链接器而不是自制程序的 ld64.lld)。
这是我当前工作的 cmake 命令作为参考:
cmake -DCMAKE_PREFIX_PATH="/usr/local/opt/llvm" \
-DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++" \
-DCMAKE_C_COMPILER="/usr/local/opt/llvm/bin/clang" -G Ninja ..
Run Code Online (Sandbox Code Playgroud)
仍然需要特定的编译器路径,因为 cmake 可以轻松直接连接到 AppleClang。 …