2013-02-21 2 views
2

Я хочу настроить файл CMakeLists.txt так, чтобы он мог сгенерировать файл .clang_complete, необходимый плагину vim clang_complete.CMake и clang_complete

Обычно, вы должны сделать это, передав параметр сценарию python, который он предоставляет компилятору и всем параметрам для компиляции. Обратите внимание, что я опускаю фактический каталог cc_args.py для сохранения в пространстве.

cc_args.py gcc test.c -o test -I~/IncludeDirs/ 

Вы также можете сделать это во время фазы макияжа ...

make CC='cc_args.py gcc' CXX='cc_args.py g++' 

Однако, я не уверен в том, как (если это возможно) установить это в файле CMakeLists.txt , Это очень раздражает, когда нужно вводить это в каждый раз, когда я хочу настроить clang_complete. Причина, по которой я хочу сделать это таким образом, заключается в том, что у меня есть несколько проектов, которые я использую для создания файла CMakeLists.txt собственный скрипт, поэтому необходимость писать сценарий для каждого из них или вручную разместить общий вариант - это шаг I Мне бы хотелось избежать.

Я пробовал пару вещей, которые до сих пор придумали ошибки.

Я пытался настроить CMAKE_CC_COMPILER и CMAKE_CXX_COMPILER на строки, похожие на первый i.e.cc_args.py g ++. Ошибки, которые возникают здесь, говорят, что он не может найти компилятор (что понятно).

Следующее, что я пробовал, - это установить переменные компилятора только в cc_args.py и добавить флаг для реального компилятора: достаточно сказать, что это произошло ужасно. CMake сказал, что он не может скомпилировать тестовую программу (учитывая, что скрипт не является компилятором, а тесты не используют установленные мной флаги, я не удивлен этим).

Таким образом, без написания каких-либо других внешних скриптов, которые требуют перемещения, есть ли кто-нибудь, кто может подумать о способе, который может это сделать?

ответ

1

Я знаю, что вы сказали «без написания каких-либо других внешних сценариев», но кажется, что вам просто нужен один-лайнер:

exec cc_args.py g++ 

А затем установить этот файл как ваш CMAKE_CXX_COMPILER. Вы могли бы даже использовать функцию CMake file() для записи однострочного файла во время сборки, если вы не хотите его распространять.

+0

Хм ... Я сделаю снимок и посмотрю, что я могу сделать. Я понятия не имел, что функция file() существует, так что это может решить мою проблему. – AdmiralJonB

+0

Использование 'file()' будет работать, но вам нужно будет сделать это перед вызовом 'project()' и установите для переменной 'CMAKE_CXX_COMPILER_INIT' точку. Вы не можете изменить компилятор, как только он установлен в CMake. – Angew

+0

А, это объяснит еще одну проблему, с которой я столкнулся с компиляторами. У меня была возможность установить компилятор, который фактически не изменил бы компилятор. – AdmiralJonB

2

Решение должно установить переменную среды CXX перед выполнением cmake. Нечто подобное:

CXX="$HOME/.vim/bin/cc_args.py clang++" cmake .. 
make 

См http://www.guyrutenberg.com/2013/01/29/vim-creating-clang_complete-using-cmake/ для более подробной информации.

+0

Я пробовал этот подход, но он не генерирует никакого файла .clang_complete' – fferri