#c #macos #bash #shell #gcc
#c #macos #bash #оболочка #gcc
Вопрос:
Я пытаюсь скомпилировать программу на C (MyProgram.c), которая включает пользовательский файл .h, который находится в указанном каталоге. Как я могу добавить каталог в gcc, чтобы я мог создавать MyProgram.c в любое время, используя только такую команду, как gcc myProgram
(без флагов, а что нет)
Ответ №1:
Вы можете сделать это, изменив C_INCLUDE_PATH
переменную среды, например
C_INCLUDE_PATH=~/include
export C_INCLUDE_PATH
Вы можете добавить это в свой .bashrc
or .bash_profile
или любой другой, чтобы переменная среды всегда была установлена правильно. Вот ссылка на то, как вы можете сделать то же самое для библиотек и C .
Комментарии:
1. Спасибо за комментарий @Rafe Kettler. Я попробовал это (usr / lib) в качестве пути, но я все еще получаю «Нет такого файла или каталога» при компиляции… Куда обычно помещаются мои пользовательские файлы заголовков, чтобы gcc всегда знал о них?
2. @Eric, где бы ты ни захотел, на самом деле. Я вставил свой
~/include
, но выбор за вами.3. @Eric. Если вы использовали «usr / lib», вы можете попробовать «/ usr / lib» вместо этого … но не помещайте файлы заголовков в /usr / lib. Если вы собираетесь это сделать, вы также можете поместить их в /usr /include.
Ответ №2:
пришлось использовать целый набор флагов, чтобы заставить это работать на El Capitan:
export DYLD_LIBRARY_PATH=/usr/local/include
export CPPFLAGS="-I/usr/local/include/snappy-c.h"
export CFLAGS="-I/usr/local/include/snappy-c.h"
export CXXFLAGS="-I/usr/local/include/snappy-c.h"
export LDFLAGS="-L/usr/local/lib"
Ответ №3:
В этой ситуации были бы полезны Makefiles, они облегчают компиляцию нескольких файловых проектов.
Предполагая, что вы используете эти же файлы и они находятся в одном каталоге
- main.c
- custom.c
- custom.h
Пример makefile может выглядеть следующим образом
all: main.o custom.o
gcc main.o custom.o -o myExecutable
main.o: main.c
gcc -c main.c
custom.o: custom.c custom.h
gcc -c custom.c
clean:
rm -f *.o myExecutable
Или что-то подобное, общий формат
name: dependency
command
Итак, выполнив make all
из командной строки, вы бы дали указание компилятору скомпилировать ваш исходный код в объектные файлы, а затем связать эти объектные файлы вместе в исполняемый файл.
Make должен быть легко доступен в любой современной системе. Для получения дополнительной информации об основных файлах makefile и их использовании обратитесь к этому простому руководству: http://mrbook.org/tutorials/make /