Извлечь флаги сборки из XCode из командной строки - PullRequest
2 голосов
/ 20 ноября 2011

Я использую X-Code 4.2 и хочу использовать VIM-редактор и clang-complete vim скрипт для завершения кода.Это работает нормально, если я вручную настроил полную конфигурацию clang, чтобы отразить настройки в моем проекте X-Code.Чтобы сделать это более плавным, я хотел бы сделать следующее:

get_compile_options some_src.m

, где some_src.m - допустимый исходный файл в моем проекте XCode.Выходные данные get_compile_options должны быть всеми флагами сборки, которые XCode будет использовать, чтобы встроить их в объектный файл.Любые идеи о том, как этого добиться.

Ответы [ 2 ]

2 голосов
/ 09 января 2012

AFAIK, нет честного метода для этого, но вы можете добавить специальную цель в проект Xcode, отключить генерацию dsym, копирование ресурсов, добавить пользовательскую опцию 'CC = <ваш пользовательский компилятор>' где '<ваш пользовательский компилятор > 'будет вашим скриптом, который записывает переданные в него параметры. 'some_src.m' будет сразу после опции '-c'. Таким образом, вы будете собирать параметры для каждого файла, компилируя свою специальную цель. Я успешно использовал этот подход с исправленной версией Clang.

1 голос
/ 29 ноября 2013

Я думаю, что нашел лучшее решение, вы можете использовать xctool .

Вы можете передать путь к вашему проекту xcode, схеме (target) и получить json с помощью команд компиляции.

$1 = path to .xcodeproj file
$2 = scheme (target) 
$3 = path for generated json


#!/bin/bash
XCTOOL_DIR=/Documents/xctool-master #the location of your xctool
$XCTOOL_DIR/xctool.sh -workspace "$1"/project.xcworkspace \
-scheme "$2" \
-reporter json-compilation-database:"$3"/compile_commands.json build

compile_commands.json - это база данных компиляции json имеет формат:

[
  { "directory": "/home/user/llvm/build",
    "command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\"With spaces, quotes and \\-es.\" -c -o file.o file.cc",
    "file": "file.cc" },
  ...
]

, и вы можете анализировать его с помощью обычных парсеров json, также вы можете использовать другие репортеры

...