[英]C Makefile to compile some selective files
我正在一个C项目中,该项目包含大约200个.c文件和一些.h文件。 最终产品中并不需要全部这200个文件。 当前,大约需要编译180个文件。 我们有一个文件“ compile_only_these.c”,其中包含该项目所需的这180个* .c文件。 我们的makefile仅编译此文件,而不编译单个.c文件。
/* file: compile_only_these.c*/
#include "file1.c"
#include "file2.c"
.
.
.
#include "file180.c"
但是我认为包括.c文件是一个坏主意。 因为每次我修改这些文件中的任何一个,所有文件都会再次编译。
您能否建议一种更好的方式来编译这些文件。
更多信息:
您需要的是makefile中的一个变量,它是必需的目标文件的列表,如下所示:
OBJS := file1.o file2.o ... file180.o
您可以使用make从compile_only_these.c
文件构造它,如下所示:
OBJS := $(shell sed -e '/\#include/!d' -e 's/\#include "\(.*\)\.c"/\1.o/' compile_only_these.c)
您是否还需要掌握使用这些对象来构造最终产品的规则?
如前所述,这是一种管理项目的怪异方法,但是鉴于您必须使用的方法,您可以尝试使用这种方法进行一些操作...
CC = gcc
OBJFILE = myprog
# Tweak to match whatever you compile with normally
CFLAGS = -O2 -Wall -std=c89 -pedantic
LDFLAGS= # Extra flags here, for example -lm -pthread
RM = rm -f
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
$(OBJFILE):$(OBJS)
$(CC) -o $@ $^ $(LDFLAGS)
clean:
$(RM) core *~ $(OBJS) $(OBJFILE)
如果您想在制作中做更多的事情而不是仅编译此文件列表,则显然需要调整构建层次结构的特定路径,但这是使用通配符替换来获取所有文件的通用方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.