每个 CFLAGS 备选方案的二进制文件

Posted

技术标签:

【中文标题】每个 CFLAGS 备选方案的二进制文件【英文标题】:Binary for each CFLAGS alternative 【发布时间】:2014-05-27 04:16:10 【问题描述】:

我需要七个由同一组源代码和标头组成的二进制文件。所有代码都必须使用相同的CFLAGS 编译。在我的问题中,CFLAGS 有 7 种替代方案:

    CFLAGS=-O0

    CFLAGS=-O1

    CFLAGS=-O1 -no-vec

    CFLAGS=-O2

    CFLAGS=-O2 -no-vec

    CFLAGS=-O3

    CFLAGS=-O3 -no-vec

使用make编译所有源代码的最短和最合适的方法是什么?

【问题讨论】:

【参考方案1】:

从命令行覆盖变量 CFLAGS?

我建议你从命令行使用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;

【讨论】:

以上是关于每个 CFLAGS 备选方案的二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将shell脚本变为可执行文件

每个备选方案的 T-SQL?

fxcop 自定义规则 - 避免每个文件有多个类

Makefile 为每个源文件生成一个二进制文件

为必须相互更新的两个表触发备选方案

Matlab:当每个单元格具有不同的行数和列数时,将二进制文件读入单元格