it-swarm.com.ru

Makefile для библиотеки

Мне нужно запускать эти 4 команды на терминале каждый раз, когда я хочу выполнить программу с использованием библиотек. 

Линии

cc -m32 -c mylib.c
ar -rcs libmylib.a mylib.o
cc -m32 -c prog.c
cc -m32 prog.o -L. -lmylib
./a.out

Как мне сделать make-файл для вышеперечисленных команд и запустить его? Подробная процедура будет приветствоваться. Благодарю.


Правка: Вот решение:

a.out: prog.o libmylib.a
      cc prog.o -L. -lmylib

prog.o: prog.c mylib.h

libprint_int.a: mylib.o
      ar -rcs libmylib.a mylib.o

print_int.o: mylib.c mylib.h

clean:
      rm a.out prog.o libmylib.a mylib.o

Это дало ошибку в строке 2, потому что я использовал пробелы вместо табуляции.

9
Aakash Anuj

Что-то вроде:

program_NAME := a.out

SRCS = mylib.c prog.c

.PHONY: all

all: $(program_NAME)

$(program_NAME): $(SRCS) 
    ar -rcs libmylib.a mylib.o
    cc -m32 prog.o -L. -lmylib

может начать

я только начал использовать make-файлы, и я думаю, что они довольно хитры, но как только вы заставите их работать, они сделают жизнь намного проще (эти, вероятно, полны ошибок, но некоторые из более опытных SO людей, вероятно, смогут помочь исправить их)

Что касается запуска, убедитесь, что вы сохранили файл как «Makefile» (случай важен)

затем из строки cmd (убедитесь, что вы перейдете в каталог, содержащий Makefile):

$ make

вот и все!

ОБНОВЛЕНИЕ

если промежуточная статическая библиотека лишняя, вы можете пропустить ее с помощью Makefile, например так:

program_NAME := a.out

SRCS = mylib.c prog.c
OBJS := ${SRCS:.c=.o}

CFLAGS += -m32

program_INCLUDE_DIRS := 
program_LIBRARY_DIRS :=
program_LIBRARIES := mylib

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))

CC=cc

LINK.c := $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

.PHONY: all

all: $(program_NAME)

$(program_NAME): $(OBJS) 
    $(LINK.c) $(program_OBJS) -o $(program_NAME)
9
bph

Простейшее руководство по пониманию файлов make доступно в Cprogramming.com . Как только вы закончите с пониманием этого, вы можете перейти через make file manual.

1
Shash

Я думаю, что нет более подробной процедуры, чем официальная документация команды make: http://www.gnu.org/software/make/manual/make.html#Overview

По сути, вам нужно создать цель и просто поместить в нее свои команды. Цель может быть 'all', если вы хотите, чтобы она работала при вводе команды 'make'. Хороший make-файл, безусловно, будет использовать переменные и т.д., Чтобы сохранить его гибкость в дополнениях lib/sources.

0
nathan