【发布时间】:2014-05-27 04:16:10
【问题描述】:
我需要七个由同一组源代码和标头组成的二进制文件。所有代码都必须使用相同的CFLAGS 编译。在我的问题中,CFLAGS 有 7 种替代方案:
CFLAGS=-O0CFLAGS=-O1CFLAGS=-O1 -no-vecCFLAGS=-O2CFLAGS=-O2 -no-vecCFLAGS=-O3CFLAGS=-O3 -no-vec
使用make编译所有源代码的最短和最合适的方法是什么?
【问题讨论】:
我需要七个由同一组源代码和标头组成的二进制文件。所有代码都必须使用相同的CFLAGS 编译。在我的问题中,CFLAGS 有 7 种替代方案:
CFLAGS=-O0
CFLAGS=-O1
CFLAGS=-O1 -no-vec
CFLAGS=-O2
CFLAGS=-O2 -no-vec
CFLAGS=-O3
CFLAGS=-O3 -no-vec
使用make编译所有源代码的最短和最合适的方法是什么?
【问题讨论】:
我建议你从命令行使用overriding 变量CFLAGS。
对于这种特殊情况,shell 命令集如下所示:
make CFLAGS=-O0; mv binary binary1; make clean;
make CFLAGS=-O1; mv binary binary2; make clean;
make CFLAGS=-O1\ -no-vec; mv binary binary3; make clean;
make CFLAGS=-O2; mv binary binary4; make clean;
make CFLAGS=-O2\ -no-vec; mv binary binary5; make clean;
make CFLAGS=-O3; mv binary binary6; make clean;
make CFLAGS=-O3\ -no-vec; mv binary binary7; make clean;
这将允许您使 makefile 保持简单,就像具有一个 CFLAGS 值的情况一样。
但是这种方法存在一个问题。要创建七个二进制文件,每次调用make 后,您都应该移动新创建的二进制文件。这可以通过引入
TARGET 特定目标名称的变量。
make CFLAGS=-O0 TARGET=binary1; make clean;
make CFLAGS=-O1 TARGET=binary2; make clean;
make CFLAGS=-O1\ -no-vec TARGET=binary3; make clean;
make CFLAGS=-O2 TARGET=binary4; make clean;
make CFLAGS=-O2\ -no-vec TARGET=binary5; make clean;
make CFLAGS=-O3 TARGET=binary6; make clean;
make CFLAGS=-O3\ -no-vec TARGET=binary7; make clean;
【讨论】: