c程序的简单Makefile

时间:2014-02-11 07:55:42

标签: c makefile

我有这个(工作)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

非常感谢 弗洛里安

2 个答案:

答案 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中也提供相同的名称)。所以您可以将其设置为样本目录中的许多源文件,并且能够编译它。