我有两个makefile,用于本机和交叉编译。它们之间唯一的区别是编译器名称:
# makefile CC = g++ ...
# makefile-cc CC = arm-linux-gnueabihf-g++ ...
要进行本机编译,我执行make
,进行交叉编译,执行make -f makefile-cc
。我希望有一个makefile
,它应该使用make
执行本机编译,而make cross
执行交叉编译。正确的语法是什么,例如:
# makefile (C-like pseudo-code) if cross CC = arm-linux-gnueabihf-g++ else CC = g++
答案 0 :(得分:17)
您可以在一行中使用语法 target:assignment assign/append variables for specific targets。这是一个例子:
native: CC=cc
native:
echo $(CC)
cross: CC=arm-linux-gnueabihf-g++
cross:
echo $(CC)
调用
make native
(或仅make
,此处)打印
echo cc
cc
并致电
make cross
打印
echo arm-linux-gnueabihf-g++
arm-linux-gnueabihf-g++
因此,您可以使用通常的编译行与$(CC)
答案 1 :(得分:8)
您可以传递参数来制作
例如make TARGET=native
和make TARGET=cross
然后使用此
ifeq ($(TARGET),cross)
CC = arm-linux-gnueabihf-g++
else
CC = g++
endif
答案 2 :(得分:0)
不完全是您想要的,但您可以将CC
视为环境变量。请考虑以下Makefile
:
all:
echo $(CC)
您可以使用CC=g++ make
来调用它,它可以为您提供:
echo g++
g++
或者通过CC=arm-linux-gnueabihf-g++ make
调用它,它会为您提供:
echo arm-linux-gnueabihf-g++
arm-linux-gnueabihf-g++
最好的部分是,您可以将这些内容分别放在~/.bashrc
export CC=g++
和export CC=arm-linux-gnueabihf-g++
中,并仅使用make
进行调用。
答案 3 :(得分:0)
另一种比gnu make ifeq
方式更便携的方法就是这样:
CROSS
包含arm-linux-gnueabihf-
或为空。
CC=$(CROSS)g++
CC将包含扩展结果。