Определение имени исполняемого файла C

Когда мы компилируем программу на C, вывод сохраняется в a.out. Как мы можем перенаправить скомпилированный вывод в другой файл?


person Community    schedule 17.03.2009    source источник
comment
gcc source.c -o имя   -  person EsmaeelE    schedule 14.06.2017


Ответы (9)


Большинство компиляторов C предоставляют для этого опцию -o, например:

gcc -o gentext gentext.c
cc  -o mainprog -Llib -lmymath firstbit.c secondbit.o
xlc -o coredump coredump.c
person paxdiablo    schedule 17.03.2009

-ofilename сделает filename вместо a.out.

person Daniel A. White    schedule 17.03.2009

Согласно руководству:

-o <file>  Place the output into <file>
person Arkaitz Jimenez    schedule 17.03.2009

В 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. Для многомодульных программ не существует жестких ограничений относительно того, будет ли выходной файл называться в честь файла с основной функцией или нет, так что вы вольны изобретать все, что вам взбредет в голову.

person Community    schedule 17.03.2009

С опцией -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 $@

Если потребуется дополнительная информация, дайте мне знать.

person Francesco Boi    schedule 12.12.2018
comment
Лучший ответ на сегодняшний день, make - это путь. - person tink; 11.01.2021

Если foo будет вашим исполняемым файлом, а bar.c — исходным файлом, тогда команда:

gcc -o foo bar.c
person Albert Davies    schedule 12.12.2018

Скомпилируйте, используя:

cc -o <opfilename> <filename.c>

Выполнить с помощью:

./<opfilename>
person KJ Sudarshan    schedule 09.08.2015

Формат предоставления имени файла .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

вы сделали!

person shubhajit22    schedule 25.12.2020

Предполагая, что вы находитесь в Ubuntu

шаг 1: запустите gcc с этими командами, чтобы скомпилировать filename.c

gcc filename.c -o filename.out

  • filename.out будет создан (может быть показано или не показано, где хранятся другие файлы)

шаг 2: выполните filename.out,

./filename.out

шаг 3: дождитесь вывода

все, вы закончили

person Rohan Devaki    schedule 03.05.2021