繁体   English   中英

C Makefile编译一些选择性文件

[英]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文件是一个坏主意。 因为每次我修改这些文件中的任何一个,所有文件都会再次编译。

您能否建议一种更好的方式来编译这些文件。

更多信息:

  • 所有.c文件都位于同一文件夹“ ../project/src”中
  • 我不断添加需要编译的新.c文件。 我不想每次添加新文件时都修改Makefile。
  • 我仍然想保留我现在不编译的20个.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM