использование Makefile в Xcode - или альтернативной IDE - PullRequest
0 голосов
/ 29 марта 2020

Я новичок в Xcode, Makefiles и вообще в программировании.

Мне дан существующий код C ++ для работы с ним, созданный с использованием Makefile. Используя Makefile, я могу без проблем собрать и запустить исполняемый файл на моем Ma c (MacOS 10.14.6).

Запуск Makefile

CC = g++-mp-9 -Wall -O2 -std=c++14 -fopenmp
DEBUG = 
CFLAGS = -c $(DEBUG) -I/opt/local/include
LFLAGS = $(DEBUG) -L/opt/local/lib -framework Accelerate -march=native -lfftw3 -lfftw3_threads -lopenblas -lm -lpthread -larmadillo

myproj: $(OBJS)
    $(CC) -o myproj $(OBJS) $(LFLAGS)

main.o: main.cpp const.h functions.h
    $(CC) $(CFLAGS) main.cpp
...

где myproj это исполняемый файл.

Я хочу использовать функции отладки Xcode 11 (или любой современной IDE - см. ALTERNATIVELY ниже) для изучения и изучения кода, который я хочу использовать. Следуя этим инструкциям Я создал проект XCode для командной строки и настроил внешнюю цель сборки.

Однако, когда я пытаюсь построить его в XCode, я получаю следующую ошибку

g++-mp-9 -Wall -O2 -std=c++14 -fopenmp -c  -I/opt/local/include main.cpp
make: g++-mp-9: No such file or directory
make: *** [main.o] Error 1

Это странно, потому что мой Makefile работает просто отлично, и в командной строке моя система может найти компилятор:

>$ whereis gcc  
/usr/bin/gcc

Может кто-нибудь объяснить, почему Xcode не может найти компилятор, и как я могу это исправить? (Также приветствуются любые советы / предупреждения об использовании Xcode для получения кода, предназначенного для сборки с использованием Makefile!)

АЛЬТЕРНАТИВНО
Я не предан Идея использования XCode, я просто подумал, что это будет естественно, так как я работаю над ма c. Если есть другая IDE с хорошим отладчиком, которая больше подходит для создания исполняемого файла командной строки с использованием Makefile, пожалуйста, дайте мне знать!

1 Ответ

0 голосов
/ 02 апреля 2020

Благодаря помощи MadScientist я понял, что переменная окружения PATH не импортируется из bash ( см. Также здесь ). Методом проб и ошибок я решил, что мне нужно установить правильные значения PATH в нескольких местах в настройках сборки и установить флажок Pass build settings in environment при создании новой цели внешней сборки.

Для дальнейшего использования, это полная процедура, которую я использовал. Вспомните, что моя проблема заключалась в том, что я хотел
- импортировать проект Makefile gnu в Xcode 11,
- проект представлял собой набор исходных файлов и Makefile, который создавал программу для запуска в командной строке
- Исходные файлы (и, следовательно, Makefile) зависят от библиотек, найденных в PATH, которые мне нужно установить в Xcode (в моем случае я установил библиотеки через MacPorts).

  1. File > New > New Project.
  2. В диалоговом окне выберите macOS > Command Line Tool, Название продукта и т. Д. c. и язык. Введите ваше местоположение для проекта.
  3. Удалить цель по умолчанию и две папки по умолчанию.
  4. File > New > Target..., чтобы создать новую цель, а затем Cross-platform > External Build System. Выберите (Product) Name для новой цели и инструмент Build Tool (мой был /usr/bin/make).
  5. (с новой целью из шага 4, выбранной в области редактора). На вкладке Info > External Build Tool Configuration выберите Directory, где находится / будет ваш make-файл. Убедитесь, что вы отметили Pass build settings in environment флажок .
  6. Выберите проект в области редактора. Установите правильные значения PATH для своих внешних библиотек, перейдя на вкладку Build Settings > All, нажав + > Add User-Defined Setting, затем в первом столбце добавьте PATH, а во втором столбце добавьте нужный путь к своим библиотекам (в моем случае ${PATH}:/opt/local/bin:/opt/local/sbin для добавления пути к библиотекам, которые я установил с MacPorts).
  7. (я не знаю, является ли этот шаг строго необходимым, но в любом случае) Нажмите на меню схемы, затем Edit scheme... или Product > Scheme > Edit scheme.... Затем в Run > Arguments > Environment Variables добавьте PATH, как в шаге 6.
  8. Нажмите на меню схемы и выберите новую цель, чтобы отметка рядом с ней (чтобы это была активная цель ?? ).
  9. Добавьте исходные файлы в проект, например, перетаскивая их из Finder в область навигации. Убедитесь, что вы отметили флажок Add to target.
  10. Убедитесь, что в вашем Makefile ваш компилятор имеет флаг -g, установленный для включения отладки.
  11. Нажмите Cmd+B для сборки.
  12. После сборки сообщите Xcode, где находится исполняемый файл, выбрав Edit scheme... (согласно шагу 7), затем Run > Info > Executable > Other..., перейдите в папку проекта. и выберите исполняемый файл командной строки, созданный на шаге 11.
  13. Нажмите для запуска Cmd+R.

Возможно, некоторые шаги не нужны, я не уверен. Я был бы счастлив узнать, есть ли лучший способ сделать это.

...