Когда мы компилируем программу на C, вывод сохраняется в a.out. Как мы можем перенаправить скомпилированный вывод в другой файл?
Определение имени исполняемого файла C
Ответы (9)
Большинство компиляторов C предоставляют для этого опцию -o
, например:
gcc -o gentext gentext.c
cc -o mainprog -Llib -lmymath firstbit.c secondbit.o
xlc -o coredump coredump.c
-ofilename
сделает filename
вместо a.out
.
Согласно руководству:
-o <file> Place the output into <file>
В Unix, откуда произошел C, программы C обычно компилируются модуль за модулем, а затем скомпилированные модули компонуются в исполняемый файл. Для проекта, состоящего из модулей foo.c
и bar.c
, команды будут такими:
cc -c foo.c
cc -c bar.c
cc -o myprog foo.o bar.o
(С параметром -c имя выходного файла становится исходным файлом с заменой суффикса на .o.)
Это также позволяет вам перекомпилировать только те модули, которые были изменены, что может значительно сэкономить время для больших программ, но также может стать довольно сложным. (Эта часть обычно автоматизируется с помощью make
.)
Для одномодульной программы нет смысла сначала компилировать в файл .o, а затем компоновать, поэтому достаточно одной команды:
cc -o foo foo.c
Для одномодульных программ принято называть результирующую исполняемую программу так же, как и исходный файл C, без суффикса .c. Для многомодульных программ не существует жестких ограничений относительно того, будет ли выходной файл называться в честь файла с основной функцией или нет, так что вы вольны изобретать все, что вам взбредет в голову.
С опцией -o
.
gcc main.c -o myCoolExecutable.o
Это нормально, если ваша программа состоит из одного файла. Если у вас есть больше файлов, я предлагаю использовать make
: создайте Makefile
, а затем запустите команду make
.
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 $@
Если потребуется дополнительная информация, дайте мне знать.
make
- это путь.
- person tink; 11.01.2021
Если foo
будет вашим исполняемым файлом, а bar.c
— исходным файлом, тогда команда:
gcc -o foo bar.c
Скомпилируйте, используя:
cc -o <opfilename> <filename.c>
Выполнить с помощью:
./<opfilename>
Формат предоставления имени файла .exe в соответствии с выбором пользователя на языке C
Шаг 1:- Запустите gcc (или имеющийся у вас компилятор) в указанном ниже формате на терминале.
gcc -o put_your_name_you_want_to_give (space) your_file_name_you_want_to_execute
NB: - Если вы используете Vs Code, используйте клавишу «Tab» для автоматического завершения.
Шаг 2 :- Запишите название программы в формате
.\the_name_you_have_given.exe
вы сделали!
Предполагая, что вы находитесь в Ubuntu
шаг 1: запустите gcc с этими командами, чтобы скомпилировать filename.c
gcc filename.c -o filename.out
filename.out
будет создан (может быть показано или не показано, где хранятся другие файлы)
шаг 2: выполните filename.out
,
./filename.out
шаг 3: дождитесь вывода
все, вы закончили