2014-02-11 6 views
0

У меня есть этот (рабочий) файл Makefile для однофайлового C-приложения.простой Makefile для программы c

all: simpleua 

simpleua: simpleua.c 
    $(CC) -o [email protected] $< `pkg-config --cflags --libs libpjproject` 

сейчас я хочу расширить этот файл Makefile для C-приложения с несколькими файлами. Файлы main.c simpleua.c simpleua.h

Я нашел некоторые образцы в Интернете, но ничего простого и работы с PKG-конфигурации

Большое спасибо Флориан

+0

Возможно, вы найдете раздел об использовании 'wildcards' в руководстве' make'. – devnull

+0

В качестве альтернативы вы можете использовать [CMake] (http://www.cmake.org/). См. Этот [ответ] (http://stackoverflow.com/questions/21654948/converting-a-visual-studio-makefile-to-a-linux-makefile/21656515#21656515) для получения дополнительной информации. – yegorich

ответ

1

Это может занять несколько итераций (и вы оставили много деталей). Попробуйте это:

all: simpleua 

simpleua: simpleua.o main.o 
    $(CC) -o [email protected] $^ `pkg-config --cflags --libs libpjproject` 

simpleua.o main.o: %.o: %.c simpleua.h 
    $(CC) -c -o [email protected] $< `pkg-config --cflags --libs libproject` 

EDIT: второй попытки (с благодаря Джонатан Леффлера). Использование --libs в правиле шаблона может быть ненужным, но попробуйте его и посмотрите.

+0

благодарит за ответ! но я получаю много «неопределенных ссылок на» ошибки с этим Makefile – user2071938

+0

Вам нужно 'pkg-config -libs libpjproject', по крайней мере, в линии ссылок; вы, возможно, не должны включать '--libs' в строку, которая создает объектные файлы. –

+0

@JonathanLeffler: Спасибо, я не знаком с pkg-config и собираюсь через онлайн-документы; Я отредактирую. (Я сказал, что может потребоваться несколько итераций.) – Beta

1

Это простой пример Makefile для вас

CC = gcc 
XX = g++ 
CFLAGS = -g 

INC := -I test.h 

$(LIBS) 

TGT = ./sample 
OUTPUT = ../output/ 

%.o: %.c  
    $(CC) $(CFLAGS) -c $< -o [email protected] 


SOURCES = $(wildcard *.c *.cpp) 
OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES))) 

$(TGT) : $(OBJS) 
    $(CC) $(OBJS) -o $(TGT)  
    chmod 777 $(TGT) 
    cp $(TGT) $(OUTPUT) 

clean: 
    rm -rf *.o *~ $(OUTPUT)/* 

Он работает как C и C++ для этого вам просто нужно изменение от ЦК до XX. Например, цели у меня есть два каталога, как и в Makefile

1)sample 

2)output 

В каталоге образца все мой источник находится, и в выходной папке мой последний двоичный скопировано (вы можете дать любое имя каталога, как вы хотите, но убедитесь, что вы также дать то же имя в Makefile). Так вы можете поместить столько исходного файла в каталог образца и сможете его скомпилировать.

Смежные вопросы