用于在Linux和Windows中工作的命令行参数

Command line arguments to make for working in Linux and Windows

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

我有一个使用makefiles在Linux和Windows上编译的项目。在Windows中使用gcc,而在Linux中使用gcc的ARM版本,即armv7-linux-gcc。我想使用一个命令行变量,它告诉makefile根据Windows或Linux使用哪个编译器。

例如,在Windows中,它应该具有如下内容:

1
2
CC= gcc  
CFLAGS= -c -D COMPILE_FOR_WINDOWS

Linux:

1
2
CC =  armv7-linux-gcc  
CFLAGS = -c -D COMPILE_FOR_LINUX

这些预处理器定义了针对Windows的compile_和针对Linux的compile_,它们存在于代码库中,无法更改。

另外,对于makeclean,它应该同时清理Windows和Linux。我不能假设构建这个系统的人安装了cygwin,所以不能使用rm删除文件。


只有在使用GNU make或类似产品时,此答案才有效:

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

为了使"clean"规则正常工作,您可能还必须为两个操作系统的文件扩展名中的任何差异创建make变量。

幼稚的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

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