С опцией -o
.
gcc main.c -o myCoolExecutable.o
Это нормально, если ваша программа состоит из одного файла. Если у вас есть больше файлов, я предлагаю использовать make
: создайте Makefile
и затем выполните команду make
.
A Makefile
- это файл, содержащий некоторые правила для компиляции.
Примером может быть следующий (#
означает, что строка является комментарием):
CXX = gcc
#CXXFLAGS = -std=c++11
#INC_PATH = ...
#LIBS = ...
SOURCEDIR := yourSourceFolder
SOURCES := $(wildcard $(SOURCEDIR)/*.c)
OBJDIR=$(SOURCEDIR)/obj
OBJECTS := $(patsubst $(SOURCEDIR)/%.c,$(OBJDIR)/%.o, $(SOURCES))
DEPENDS := $(patsubst $(SOURCEDIR)/%.c,$(OBJDIR)/%.d, $(SOURCES))
# ADD MORE WARNINGS!
WARNING := -Wall -Wextra
# .PHONY means these rules get executed even if
# files of those names exist.
.PHONY: all clean
# The first rule is the default, ie. "make",
# "make all" and "make parking" mean the same
all: yourExecutableName
clean:
$(RM) $(OBJECTS) $(DEPENDS) yourExecutableName
# Linking the executable from the object files
# $^ # "src.c src.h" (all prerequisites)
yourExecutableName: $(OBJECTS)
$(CXX) $(WARNING) $^ -o $@
#$(CXX) $(WARNING) $(CXXFLAGS) $(INC_PATH) $^ -o $@ $(LIBS)
-include $(DEPENDS)
$(OBJDIR):
mkdir -p $(OBJDIR)
$(OBJDIR)/%.o: $(SOURCEDIR)/%.c Makefile | $(OBJDIR)
$(CXX) $(WARNING) -MMD -MP -c $< -o $@
Вскоре переменная CXX
определяет ваш компилятор (gcc, g ++), with CXXFLAGS
вы можете определить флаги для вашей компиляции (т.е. -std=c++11
). Затем вы можете включить и определить пользовательские (INC_PATH
и LIBS
: не указано в примере). С помощью SOURCEDIR
вы можете указать каталог с исходным кодом (где находятся *.c
файлы). Затем SOURCES
в основном говорит о том, что все исходные файлы для компиляции - это файлы с расширением *.c
.
Makefile
содержит набор правил, структура которого следующая:
output: inputs
commandToExecute
Правило генерации вашего исполняемого файла:
yourExecutableName: $(OBJECTS)
$(CXX) $(WARNING) $^ -o $@
, что эквивалентно gcc -Wall -Wextra $(OBJECTS) -o yourExecutableName
.
$(OBJECTS)
- объектный файл, полученный в результате компиляции. Когда указанное выше правило выполняется, если они не найдены, make продолжит сканирование файла, чтобы найти правило для их генерации. В этом случае правило для генерации этих файлов:
$(OBJDIR)/%.o: $(SOURCEDIR)/%.c Makefile | $(OBJDIR)
$(CXX) $(WARNING) -MMD -MP -c $< -o $@
Если потребуется дополнительная информация, дайте мне знать.