我正在为应用程序生成一个Makefile,它可以通过两种不同的方式构建。一个(我们可以称之为基本输出),有一个输出叫做a.out1。第二个输出是通过显式传递参数来进行的 - 例如`make a.out2'并启用某些功能,这些功能由源中的预处理器打开。 因此,目标文件与来自a.out1的目标文件不同。有没有一个选项可以在构建a.out2时在Makefile中指定,明确指出如果a.out1已经构建,请使用目标文件清除并构建a.out1(并依赖objs)? (当然反之亦然) 谢谢Makefile - 两个不同的目标
1
A
回答
0
这个怎么样?
a.out2: clear1
#other commands
a.out1: clear2
#other commands
+0
Ehm,这是最简单的解决方案。但是如果只有a.out2并且我改变了file.c?然后我必须再次编译整个项目。这不是我正在寻找的解决方案。 – jonathan
1
如果你不介意有单独的对象文件(例如objA1.o
和objA2.o
),那么这里有一个办法做到这一点:
OBJECTS = objA objB objC
OBJ1 = $(addsuffix 1.o,$(OBJECTS))
OBJ2 = $(addsuffix 2.o,$(OBJECTS))
a.out1: $(OBJ1)
link $^ together one way
a.out2: $(OBJ2)
link $^ together another way
obj%1.o: %.cc
build [email protected] from $< by rule 1
obj%2.o: %.cc
build [email protected] from $< by rule 2
如果两个可执行文件(a.out
和a.out2
)需要不同目标文件,你可以这样做:
COMMON_OBJECTS = objA objB objC
OBJ1 := $(addsuffix 1.o,$(COMMON_OBJECTS))
OBJ2 := $(addsuffix 2.o,$(COMMON_OBJECTS))
OBJ1 += objD
OBJ2 += objE objF
如果两个构建命令(用于构建对象的区别两种不同的方法)是简单的东西,比如改变一个编译器参数,就可以使最后两个规则稍微简单:
obj%1.o: CC_FLAGS += $(FLAGS_FOR_ONE)
obj%2.o: CC_FLAGS += $(FLAGS_FOR_TWO)
obj%1.o obj%2.o: %.cc
build [email protected] from $< using $(CC_FLAGS)
同样,如果连接命令是除了一个连接的参数相同(或完全相同):
a.out1: $(OBJ1)
a.out1: LINKER_FLAGS += $(L_FLAGS_FOR_ONE)
a.out2: $(OBJ2)
a.out1: LINKER_FLAGS += $(L_FLAGS_FOR_TWO)
a.out1 a.out2: $(OBJ1)
link $^ together using $(LINKER_FLAGS)
相关问题
- 1. Makefile多目标vs分离目标给出不同的结果
- 2. Makefile来自同一源文件的多个目标,具有不同的标志
- 3. makefile编译多个源,标志不同
- 4. 如何在不同目录中指定makefile目标?
- 5. Makefile与不同目录中的文件
- 6. 使用Makefile将对象文件存储在两个不同的目录中? [C]
- 7. 覆盖Makefile目标
- 8. 如何在同一个Makefile中调用已定义的目标?
- 9. 构建makefile中的多个目标
- 10. 具有多个目标的Makefile
- 11. “多个目标模式”的Makefile错误
- 12. 使用rsync将两个源目录同步到两个不同的目标目录
- 13. Makefile中的所有目标
- 14. Makefile:跨组合的目标
- 15. Makefile为两个编译器和不同的优化技术
- 16. “另一个makefile创建的目标无目标”
- 17. Makefile:目标模式不包含'%'
- 18. Makefile问题 - 不执行目标命令
- 19. 在Makefile中锁定整个目标
- 20. Makefile只执行第一个目标
- 21. 如何在Makefile输出中将两个不同的源目录输出到一个bin目录?
- 22. wpf源码和目标绑定在两个不同的路径
- 23. 将多个文件复制到Makefile中的不同目录中
- 24. 的Makefile再造目录目标
- 25. 在两个不同的目录中安装两个不同的yt版本
- 26. 做不好有没有默认的目标在一个Makefile
- 27. Visual Studio Makefile项目同步
- 28. makefile内部调用目标
- 29. 什么是Makefile目标`.c.o`?
- 30. 参数化Makefile目标
你可以这样做,但是你失去了单独编译的好处,除非你经常只重新编译一个目标。也许使用不同的目标文件目录? – delnan
好的,是否有一个简单的规则来指定如何为a.out2(例如)whith postfix编译objs?例如。如: – jonathan
* 2.o:* .c: CC%.c -o%2.o – jonathan