3

我已经通过 从命令行传递附加变量链接到 make

我有一个使用 makefile 在 Linux 和 Windows 上编译的项目。在 Windows 中它使用 gcc 而在 Linux 中它使用gccie 的 ARM 版本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用于删除文件。

4

2 回答 2

1

此答案仅在您使用 GNU make 或类似产品时有效:

使用环境变量有条件地设置您的 make 变量。

为了使“干净”规则正常运行,您可能还必须为任一操作系统的文件扩展名的任何差异创建一个 make 变量。

天真的例子:

ifeq ($(OS), Windows_NT)
  CC=gcc
  RM=del
  EXE=.exe
  CFLAGS=-c -DCOMPILE_FOR_WINDOWS
else
  CC=armv7-linux-gcc
  RM=rm  
  EXE=
  CFLAGS=-c -DCOMPILE_FOR_LINUX
endif

PROG=thing$(EXE)

.PHONY: all
all: $(PROG)
        $(CC) $(CFLAGS) -o $(PROG) main.c

.PHONY: clean
clean:
        -$(RM) $(PROG) *.o
于 2013-10-15T06:05:49.137 回答
0

也许您可以使用ant(带有 build.xml 文件)来构建项目。否则,在 Makefile 中,您需要检查系统并设置一些条件来检查您是在 Unix 环境还是 Windows 环境中制作项目。

于 2012-07-29T17:21:00.423 回答