У меня есть два make-файла, для нативной и кросс-компиляции. Единственная разница между ними — имя компилятора:
# makefile CC = g ++ ...
# makefile-cc CC = arm-linux-gnueabihf-g ++ ...
Чтобы сделать нативную компиляцию, я выполняю make
, чтобы сделать кросс-компиляцию, я выполняю make -f makefile-cc
, Я хочу иметь один makefile
, который должен быть выполнен с использованием make
для нативной компиляции и make cross
для кросс-компиляции. Какой правильный синтаксис для этого, что-то вроде:
# makefile (C-подобный псевдокод) если крест CC = arm-linux-gnueabihf-g ++ еще CC = g ++
Вы можете назначать / добавлять переменные для конкретных целей используя синтаксис Цель: назначение на линии. Вот пример:
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)
Вы можете передать параметры, чтобы сделать.
например make TARGET=native
а также make TARGET=cross
затем используйте это
ifeq ($(TARGET),cross)
CC = arm-linux-gnueabihf-g++
else
CC = g++
endif
не совсем то, что вы хотели, но вы можете прочитать 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
,
Еще один способ сделать это, который является более портативным, чем GNU Make ifeq
путь этот:
CROSS
содержит либо arm-linux-gnueabihf-
или пусто.
CC=$(CROSS)g++
CC будет содержать результат расширения.