首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Linux上为gcc制作一个简单的makefile?

如何在Linux上为gcc制作一个简单的makefile?
EN

Stack Overflow用户
提问于 2009-09-27 23:50:17
回答 4查看 256.5K关注 0票数 140

我有三个文件:program.cprogram.hheaders.h

program.c包括program.hheaders.h

我需要在Linux上使用gcc编译器进行编译。我不知道该怎么做。Netbeans为我创建了一个,但它是空的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-28 00:12:27

有趣的是,我不知道make会默认使用C编译器,给出源文件的规则。

无论如何,演示简单Makefile概念的简单解决方案是:

代码语言:javascript
复制
HEADERS = program.h headers.h

default: program

program.o: program.c $(HEADERS)
    gcc -c program.c -o program.o

program: program.o
    gcc program.o -o program

clean:
    -rm -f program.o
    -rm -f program

(请记住,make需要制表符而不是空格缩进,因此在复制时一定要解决这个问题)

但是,为了支持更多的C文件,您必须为每个C文件制定新的规则。因此,要改进:

代码语言:javascript
复制
HEADERS = program.h headers.h
OBJECTS = program.o

default: program

%.o: %.c $(HEADERS)
    gcc -c $< -o $@

program: $(OBJECTS)
    gcc $(OBJECTS) -o $@

clean:
    -rm -f $(OBJECTS)
    -rm -f program

我尝试通过省略在makefile中常见的$(CC)和$(CFLAGS)等变量来尽可能简单地实现这一点。如果您有兴趣弄清楚这一点,我希望我已经给了您一个良好的开端。

下面是我喜欢用于C源代码的Makefile。请随意使用它:

代码语言:javascript
复制
TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall

.PHONY: default all clean

default: $(TARGET)
all: default

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)

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

.PRECIOUS: $(TARGET) $(OBJECTS)

$(TARGET): $(OBJECTS)
    $(CC) $(OBJECTS) -Wall $(LIBS) -o $@

clean:
    -rm -f *.o
    -rm -f $(TARGET)

它使用make实用程序的通配符和patsubst特性自动将.c和.h文件包含在当前目录中,这意味着当您向目录中添加新的代码文件时,您不必更新Makefile。但是,如果要更改生成的可执行文件的名称、库或编译器标志,则只需修改变量即可。

无论哪种情况,请不要使用autoconf。我求你了!:)

票数 210
EN

Stack Overflow用户

发布于 2009-09-27 23:59:31

代码语言:javascript
复制
all: program
program.o: program.h headers.h

就足够了。其余的都是隐式的

票数 14
EN

Stack Overflow用户

发布于 2013-09-20 07:47:05

最简单的make文件可以是

代码语言:javascript
复制
all : test

test : test.o
        gcc -o test test.o 

test.o : test.c
        gcc -c test.c

clean :
        rm test *.o
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1484817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档