Один make-файл для двух компиляторов

У меня есть два 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 ++

10

Решение

Вы можете назначать / добавлять переменные для конкретных целей используя синтаксис Цель: назначение на линии. Вот пример:

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)

17

Другие решения

Вы можете передать параметры, чтобы сделать.
например make TARGET=native а также make TARGET=cross затем используйте это

ifeq ($(TARGET),cross)
CC = arm-linux-gnueabihf-g++
else
CC = g++
endif
8

не совсем то, что вы хотели, но вы можете прочитать 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,

0

Еще один способ сделать это, который является более портативным, чем GNU Make ifeq путь этот:

CROSS содержит либо arm-linux-gnueabihf- или пусто.

CC=$(CROSS)g++

CC будет содержать результат расширения.

0