首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非递归多级makefile

非递归多级makefile
EN

Stack Overflow用户
提问于 2016-11-24 18:33:52
回答 1查看 398关注 0票数 1

我开始做一个我想要成长为相当大的项目。我想要创建一个makefile,它将与项目一起成长,而不需要太多的维护。下面是我现在的目录结构。

代码语言:javascript
复制
.
+--src
|  +--part1
|  |  +--part1.c
|  |  +--part1.h
|  +--part2
|  |  +--part2.c
|  |  +--part2.h
.  .
.  .
.  .
|  +--partN
|  |  +--partN.c
|  |  +--partN.h
+--test
|  +--part1_tests
|  |  +--part1_testX.c
|  |  +--part1_testY.c
.  .
.  .
.  .
+--obj
|  +--part1.o
|  +--part2.o
.  .
.  .
.  .
|  +--partN.o
+--a.out

我从来没有这样规模的项目,也不需要为这样的项目制作文件。我该如何设计一个makefile呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-25 07:38:37

做这件事有不同的方法,但我会从不让makefile与项目一起成长开始。相反,我将使用常规结构来定义规则,以处理一个目录中的一个codefile的项目,以及具有上千个文件的大型项目。

例如,让我们使用一下您的结构(未经测试的可能有一些排版,我假设您从project开始制作):

代码语言:javascript
复制
 # we nead the header directory 
 INCDIRS        = src

 # collect every cpp file
 CXXSRCS  = $(shell find src/ -type f -name '*.cpp' 2>/dev/null)

 # now generate the object file names
 OBJSTMP  = $(CXXSRCS:%.cpp=obj/%.o)

 # compiled the source file
 obj/%.o: src/%.cpp 
      $(CXX) ${CXXFLAGS} $(foreach bin,${INCDIRS},-I${bin}) -o "$@" "$<"

现在假设您的mainpart1.cpp

代码语言:javascript
复制
ifneq (,$(wildcard src/part1/part1.cpp))

# I just dont like a.out...
executable=${APPLICATION_NAME}

# now lets build the exe:
${executable}: ${OBJS}
    $(LD) $(LDFLAGS) -o $@ $^
endif

最后一件事是化妆品:

代码语言:javascript
复制
.PHONY: clean all

all: install

compile: ${OBJS}

package: compile ${executable}
    #now we can move the object files to were they should be
    mv -f obj/part*/* obj/

install: package

无论您的项目有多大,这个makefile都会执行您的一些步骤。只是想给你个主意。我忽略了test_files。但是,考虑到前面的情况,您可以像我一样收集测试源,就像我使用正常的源一样。

因此,我的观点是,您的makefile完全没有理由必须与项目的大小一起增长,而只是因为它的复杂性

有关更多信息,请参阅stackoverflow的文档,这里有大量有关makefile的信息。

希望能帮上忙

Kai

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

https://stackoverflow.com/questions/40792792

复制
相关文章

相似问题

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