Как указать компилятор в makefile, когда переменная CC не использовалась? - PullRequest
0 голосов
/ 07 марта 2019

Обычно, когда я хочу make и установить мой компилятор на uclibc вместо gcc, я могу просто сделать make CC=/path/to/uclibc, так как make-файлы должны использовать эту переменную, или я могу использовать скрипт configure.Пакет, который я сейчас создаю, не реализует CC или не имеет сценария configure, и хотя я пытался установить компилятор, я не могу заставить его работать, понимаете?Вот оригинальный файл сборки.

# Determination of the target system
target = $(shell uname)
sysdir = Lx

ifdef target
 ifeq ("$(target)","QNX")
  sysdir = Qx
 endif
endif

M = for i in $(ALLDIRS); do make -C $$i/$(sysdir)
N = || exit 1; done

ifeq ("$(target)","QNX")
install:
    cp CgosDump/$(sysdir)/cgosdump /usr/bin
    cp CgosMon/$(sysdir)/cgosmon /usr/bin
    cp CgosLib/$(sysdir)/libcgos.so /usr/lib
    cp CgosDrv/$(sysdir)/cgosdrv /usr/lib
    cp CgosTest/$(sysdir)/cgostest /usr/lib
else

default:
    $(M) $(N)

install:
    install -m 755 -o root -g root CgosDump/$(sysdir)/cgosdump /usr/bin
    install -m 755 -o root -g root CgosMon/$(sysdir)/cgosmon /usr/bin
    install -m 755 -o root -g root CgosTest/$(sysdir)/cgostest /usr/bin
    install -m 755 -o root -g root CgosLib/$(sysdir)/libcgos.so /usr/lib
    install -m 644 -o root -g root CgosDrv/$(sysdir)/cgosdrv.ko /lib/modules/`uname -r`/kernel/drivers/misc
    depmod -a

# copy the udev rules to /lib/udev/rules.d - but only if the file does not already exist
    @if ! [ -e /lib/udev/rules.d/99-cgos.rules ]; \
    then \
        cp 99-cgos.rules /lib/udev/rules.d/99-cgos.rules; \
        echo "Copied CGOS udev rule to /lib/udev/rules.d."; \
    fi

# copy the configuration file for module insertion at startup to /usr/lib/modules-load.d - but only if the file does not already exist
    @if ! [ -e /usr/lib/modules-load.d/cgos.conf ]; \
    then \
        cp cgos.conf /usr/lib/modules-load.d/cgos.conf; \
        echo "Added cgos.conf to /usr/lib/modules-load.d for cgosdrv module insertion at system startup."; \
    fi

clean:
    $(M) $@ $(N)

endif

. / CgosLib / Lx / Makefile:

PROJECT_INC = -I. -I.. -I../.. -I../../CgosLib
PROJECT_LIB =
C_source = LibOsaLx.c ../LibOsaM.c
C_source_p = ../Cgos.c
DEF = -DUNIX
OPT = -Wall -fPIC

default: $(C_source) libcgosp.o
    gcc -shared -o libcgos.so $(OPT) $(DEF) $(PROJECT_INC) $(C_source) libcgosp.o

libcgosp.o:
    gcc -Wl,-r -no-pie -nostdlib -o libcgosp.o $(OPT) $(DEF) $(PROJECT_INC) $(C_source_p)

clean:
    rm -f *.so *.o

. / CgosDrv / Lx / Makefile:

# Kernel-Makefile for building cgos for kernel version 2.6.x, 3.x and 4.x
#

# by default, the kernel source is assumed to be in
# /lib/modules/`uname -r`/build

# ATTENTION: use the install option with care: it`s assumed that the
# driver was build for the currently running kernel.

KERNELDIR ?= /lib/modules/`uname -r`/build
CONFIG_CGOS ?= m

C_source = DrvLx.c DrvOsaLx.c ../CgosDrv.c ../Cgeb.c

make26_pre16 = $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
make26 = $(MAKE) -C $(KERNELDIR) M=$(PWD)

sublevel = $(shell sed -n s/SUBLEVEL\ =\ *//p $(KERNELDIR)/Makefile)
patchlevel = $(shell sed -n s/PATCHLEVEL\ =\ *//p $(KERNELDIR)/Makefile)

mkcmd = $(shell if [ "$(version)" -lt 3 && "$(patchlevel)" == 6 && "$(sublevel)" -lt 16 ]; then echo $(make26_pre16); \
    else echo $(make26); fi; )

ifdef KERNELRELEASE

    EXTRA_CFLAGS += -I$(obj)/. -I$(obj)/.. -I$(obj)/../../CgosLib
    EXTRA_CFLAGS += -I$(obj)/../../CgosLib/Lx
#   EXTRA_CFLAGS += -O2 -mcmodel=kernel -DAMD64 -fno-strict-aliasing
#   EXTRA_CFLAGS += -O2 -DAMD64 -fno-strict-aliasing
    EXTRA_CFLAGS += -O2 -fno-strict-aliasing
    EXTRA_CFLAGS += -I$(obj)/../..
    obj-$(CONFIG_CGOS) += cgosdrv.o 

    cgosdrv-objs := DrvLx.o DrvOsaLx.o ../Cgeb.o ../CgosDrv.o 
    clean-files := *.o
else
    PWD := $(shell pwd)
    obj := $(PWD)

    DEF = -DUNIX -D__KERNEL__ -Dlinux -DMODULE
    EXTRA_CFLAGS = $(DEF) -O2 -Wall -Wl,-r -nostdlib
    EXTRA_CFLAGS += -I. -I.. -I../.. -I$(KERNELDIR)/include -I../../CgosLib
#   EXTRA_CFLAGS += -mcmodel=kernel -DAMD64 -fno-strict-aliasing
#   EXTRA_CFLAGS += -DAMD64 -fno-strict-aliasing
    EXTRA_CFLAGS += -fno-strict-aliasing

default:
    $(call mkcmd)

emu:
    gcc -o cgosdrv.o -D CGEBEMU $(EXTRA_CFLAGS) $(C_source) ../CgebEmu.c

endif

clean:
    rm -rf *~ *.ko *.mod.* .*.cmd .tmp* .*.tmp* .*.mk .*Drv*.o cgosdrv.o
    rm -rf DrvLx.o DrvOsaLx.o built-in.o
    rm -rf .*.flags
    rm -rf Module.symvers modules.order
    rm -rf ../*.o* ../.*.o*

install:
    install -m 644 -o root -g root cgosdrv.ko /lib/modules/`uname -r`/kernel/drivers/misc

./ CgosMon / Lx / Makefile

PROJECT_INC = -I. -I.. -I../.. -I../../CgosLib
PROJECT_LIB = -lcgos -L../../CgosLib/Lx
C_source = ../CgosMon.c
OPT = -Wall

default:
    gcc $(C_source) -o cgosmon $(OPT) $(DEF) $(PROJECT_INC) $(PROJECT_LIB)

clean:
    rm -f cgosmon

cleanall: clean

buildmaster@x86build:~/cgoslx-x64-1.03.029$ 
buildmaster@x86build:~/cgoslx-x64-1.03.029$ cat ./CgosMon/Lx/Makefile
PROJECT_INC = -I. -I.. -I../.. -I../../CgosLib
PROJECT_LIB = -lcgos -L../../CgosLib/Lx
C_source = ../CgosMon.c
OPT = -Wall

default:
    gcc $(C_source) -o cgosmon $(OPT) $(DEF) $(PROJECT_INC) $(PROJECT_LIB)

clean:
    rm -f cgosmon

cleanall: clean

. / CgosMon / Lx / Makefile:

PROJECT_INC = -I. -I.. -I../.. -I../../CgosLib
PROJECT_LIB = -lcgos -L../../CgosLib/Lx
C_source = ../CgosMon.c
OPT = -Wall

default:
    gcc $(C_source) -o cgosmon $(OPT) $(DEF) $(PROJECT_INC) $(PROJECT_LIB)

clean:
    rm -f cgosmon

cleanall: clean

buildmaster@x86build:~/cgoslx-x64-1.03.029$ cat 
^C
buildmaster@x86build:~/cgoslx-x64-1.03.029$ cat ./CgosDump/Lx/Makefile
PROJECT_INC = -I. -I.. -I../.. -I../../CgosLib
PROJECT_LIB = -lcgos -L../../CgosLib/Lx
C_source = ../CgosDump.c
OPT = -Wall

default:
    gcc $(C_source) -o cgosdump $(OPT) $(DEF) $(PROJECT_INC) $(PROJECT_LIB)

clean:
    rm -f cgosdump

cleanall: clean

. / CgosTest / Lx / Makefile:

PROJECT_INC = -I. -I.. -I../.. -I../../CgosLib
PROJECT_LIB = -lcgos -L../../CgosLib/Lx
C_source = ../cgostest.c ../generic.c
OPT = -Wall

default:
    gcc $(C_source) -o cgostest $(OPT) $(DEF) $(PROJECT_INC) $(PROJECT_LIB)

clean:
    rm -f cgostest

cleanall: clean

EDIT: кажется, что это было жестко закодировано в подкаталогах, я могу изменить это на мой путь к компилятору.

...