как написать простой make-файл для c - PullRequest
1 голос
/ 23 сентября 2011

Мне нужно написать простой файл make для my.c, и так после

make

тогда моя программа может быть запущена

./my

my.c можно скомпилировать следующим образом:

gcc cJ/cJ.c my.c -lcrypto -o my -lm

Спасибо Я положил это в мой make-файл

all:my
my: cJ.o my.o
 gcc cJ.o -lcrypt my.o -o my
cJ.o: cJ/cJ.c
     gcc -c cJ/cJ.c
my.o: my.c
     gcc -c my.c -lm

помогите пожалуйста

Ответы [ 4 ]

8 голосов
/ 23 сентября 2011

Вот простой урок, которому вы могли бы следовать: http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/

Одна очень важная вещь с make - правильно настроить вкладки!

7 голосов
/ 23 сентября 2011

Ну, make-файлы - это просто особые сценарии. Каждый уникален, для такой простой задачи этого будет достаточно:

Makefile:

CC=gcc
CFLAGS=-lm -lcrypto
SOURCES=my.c cJ/cJ.c

all: my

my: $(SOURCES)
        $(CC) -o my $(SOURCES) $(CFLAGS)

Позже вы можете использовать некоторые другие параметры, такие как подстановочные знаки %. C для компиляции в несколько файлов без необходимости их записи.

В качестве альтернативы:

CC=gcc
CFLAGS=-lm -lcrypto

MY_SOURCES = my.c cJ/cJ.c
MY_OBJS = $(patsubst %.c,%.o, $(MY_SOURCES))

all: my

%o: %.c
    $(CC) $(CFLAGS) -c $<

my: $(MY_OBJS)
    $(CC) $(CFLAGS) $^ -o $@

Обратите внимание, что строки после каждой цели ("my:", ...) должны начинаться с табуляции (\ t), а не пробелов.

3 голосов
/ 23 сентября 2011

Просто незначительное исправление: добавьте -lm к шагу связывания, и там после всех объектных файлов.

all: my
my: cJ.o my.o
    gcc cJ.o my.o -o my -lcrypt -lm
cJ.o: cJ/cJ.c
    gcc -c cJ/cJ.c
my.o: my.c
    gcc -c my.c

И тогда вы можете больше работать с автоматическими переменными :

all: my
my: cJ.o my.o
    gcc $^ -o $@ -lcrypt -lm
cJ.o: cJ/cJ.c
    gcc -c $^
my.o: my.c
    gcc -c $^

, где $@ - цель текущего правила, а $^ - предварительные условия.

См. Также http://www.gnu.org/software/make/manual/make.html.

0 голосов
/ 23 сентября 2011

простой файл make для вашей программы:

build : 
        gcc /your_full_path_to_c_file/cJ.c my.c -lcrypto -o my -lm

, просто скопируйте его в один файл, сохраните имя этого файла как makefile и запустите как make build

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...