Моя цель - создать псевдоним для моей команды cmake, чтобы она использовала только мою домашнюю установку llvm, а не набор, установленный Xcode. Я бы также хотел оставить системные значения по умолчанию. Я нахожусь на Catalina с Xcode и homebrew llvm в актуальном состоянии.
Мой первый шаг - использовать homebrew 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
Для завершения, вот мой CMakeLists.txt; это довольно скромно, так как большая часть работы, которую я хочу сделать, не принадлежит CMakeLists.txt, и я просто пытаюсь скомпилировать игрушечную программу.
cmake_minimum_required(VERSION 3.15)
project(test)
set(CMAKE_CXX_STANDARD 17)
add_executable(test
main.cc)
Но я уже застрял здесь с cmake , Я могу указать компилятор, используя
-DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++
и аналогичный для C / Clang. Я также использую CMAKE_PREFIX_PATH
, но когда я открываю мои build.ninja
файлы, я все еще вижу, что они ссылаются на каталоги Xcode. Добавление CMAKE_IGNORE_PATH
, похоже, не позволяет игнорировать /Applications/Xcode.app.
Я также попытался добавить флаги CMAKE_CXX_STANDARD_LIBRARIES
и CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
в мою команду cmake, но если я при этом я начинаю получать ошибки компоновщика (я все еще использую системный компоновщик, а не ld64.lld homebrew, я полагаю).
Вот моя текущая рабочая команда 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 ..
Указанные пути компилятора c все еще требуются, потому что cmake просто переходит прямо в AppleClang.
Я знаю, что повторение пути раздражает, но я хочу, чтобы сработала полная команда, прежде чем я начну изменять мой .zshr c.
Вот неработающая команда (сломанная, поскольку при сборке программа больше не выполняется, cmake здесь не жалуется):
cmake -DCMAKE_IGNORE_PATH="/Applications/Xcode.app" -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" \
-DCMAKE_CXX_STANDARD_LIBRARIES="/usr/local/opt/llvm/lib" \
-DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES="/usr/local/opt/llvm/include/c++/v1" \
-G Ninja ..
С сообщением об ошибке сборки:
[2/2] Linking CXX executable test
FAILED: test
: && /usr/local/opt/llvm/bin/clang++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/test.dir/main.cc.o -o test /usr/local/opt/llvm/lib && :
ld: can't map file, errno=22 file '/usr/local/opt/llvm/lib' for architecture x86_64
clang-9: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
Переменная CMAKE_CXX_LINK_EXECUTABLE
просто игнорируется, поэтому она не включается.
Если у кого-либо есть какие-либо рекомендации, я был бы признателен. Все ссылки, которые я нашел по этому поводу, обычно переопределяют системные значения по умолчанию, и я хотел бы избежать этого, если это возможно.