我有这个(工作)Makefile用于单文件C-Application。
all: simpleua
simpleua: simpleua.c
$(CC) -o $@ $< `pkg-config --cflags --libs libpjproject`
现在我想为多文件C-Application扩展这个Makefile。 文件是main.c simpleua.c simpleua.h
我在互联网上找到了一些样本,但没有什么简单的,并且使用pkg-config
非常感谢 弗洛里安
答案 0 :(得分:1)
这可能需要几次迭代(而且你遗漏了很多细节)。试试这个:
all: simpleua
simpleua: simpleua.o main.o
$(CC) -o $@ $^ `pkg-config --cflags --libs libpjproject`
simpleua.o main.o: %.o: %.c simpleua.h
$(CC) -c -o $@ $< `pkg-config --cflags --libs libproject`
编辑:第二次尝试(感谢Jonathan Leffler)。在模式规则中使用--libs
可能是不必要的,但请尝试并查看。
答案 1 :(得分:1)
这是您的简单示例Makefile
CC = gcc
XX = g++
CFLAGS = -g
INC := -I test.h
$(LIBS)
TGT = ./sample
OUTPUT = ../output/
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
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 ++,您只需要从CC更改为XX。
例如,我有两个目录,如Makefile
1)sample
2)output
在示例目录中,我的所有源都驻留在输出文件夹中,我的最终二进制文件已被复制(您可以根据需要为目录指定任何名称,但请确保在Makefile
中也提供相同的名称)。所以您可以将其设置为样本目录中的许多源文件,并且能够编译它。