【发布时间】:2012-05-27 05:08:10
【问题描述】:
我已经浏览了链接 Passing additional variables from command line to make.
我有一个使用 makefile 在 Linux 和 Windows 上编译的项目。在 Windows 中它使用 gcc,而在 Linux 中它使用 ARM 版本的gcc 即armv7-linux-gcc。
我想使用一个命令行变量来告诉 makefile 根据 Windows 或 Linux 使用哪个编译器。
例如在 Windows 中它应该是这样的:
CC= gcc
CFLAGS= -c -D COMPILE_FOR_WINDOWS
对于 Linux:
CC = armv7-linux-gcc
CFLAGS = -c -D COMPILE_FOR_LINUX
这些预处理器定义 COMPILE_FOR_WINDOWS 和 COMPILE_FOR_LINUX 存在于代码库中,无法更改。
对于 make clean 它也应该为 Windows 和 Linux 清理。我不能假设我构建它的人会安装 Cygwin,所以不能使用 rm 删除文件。
【问题讨论】:
-
由于标准
make中没有条件机制,因此您在makefile 中作为条件执行的任何操作都有些特定于平台。如果你不打算授权rm,大概你也不会授权GNUmake,所以你只是让自己变得非常困难。为这两种配置考虑单独的 makefile 或 makefile 片段,因此您最终会运行make -f makefile.unix或make -f makefile.win64或其他任何东西。尽量减少差异,但您需要知道 Windows 支持什么。 -
为了清楚,您使用的是哪个版本的 Make?
-
也许你应该转向像 cmake 这样的 makefile 生成器?
-
问题是什么?如果是关于 rm,因为您自己已经回答了其他所有问题。然后以同样的方式进行。
RM=rm或RM=del
标签: windows linux makefile command-line-arguments