gcc编译多个文件

一次性编译

gcc [-Wall] hello_fn.c main.c –o newhello

独立编译

gcc -Wall -c main.c -o main.o
gcc -Wall -c hello_fn.c -o hello_fn.o
gcc -Wall main.o hello_fn.o -o newhello
#链接生成可执行文件

优点:如果只是改动了一个模块,则不用再次编译全部模块,以节省编译时间[推荐]

测试程序

hello_fu.h

#ifndef _HELLO_FUN_H
#define _HELLO_FUN_H

void hello(const char *str);

#endif

hello_fu.c

#include <stdio.h>
#include "hello_func.h"

void hello(const char *str)
{
    printf("Hello %s\n",str);
    printf("Compiled: "__DATE__" at "__TIME__"\n");
    printf("This is line %d of file %s\n",__LINE__,__FILE__);

    return;
}

main.c

#include "hello_func.h"

int main()
{
    hello("world");

    return 0;
}

Makefile

CC = gcc
CFLAGS = -Wall -g

BIN = main
SOURCES = $(wildcard *.c)
OBJECTS = $(SOURCES:.c=.o)

.PHONY: all clean

all: $(BIN)
$(BIN): $(OBJECTS)
$(CC) $(CFLAGS) -o $@ $^

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

clean:
-rm -rf $(BIN) $(OBJECTS)