2

私は現在makeファイルを持っています。その一部は次のようになります。

####################################################################
# Files                                                            #
####################################################################

C_SRC +=  \
CMSIS/CM3/CoreSupport/core_cm3.c \
CMSIS/CM3/DeviceSupport/EnergyMicro/EFM32/system_efm32.c \
efm32lib/src/efm32_assert.c \
efm32lib/src/efm32_system.c \
efm32lib/src/efm32_gpio.c \
efm32lib/src/efm32_cmu.c \
efm32lib/src/efm32_usart.c \
efm32lib/src/efm32_i2c.c \
efm32lib/src/efm32_dma.c \
efm32lib/src/efm32_timer.c \
efm32lib/src/efm32_int.c \
efm32lib/src/efm32_emu.c \
efm32lib/src/efm32_adc.c \
efm32lib/src/efm32_rtc.c \
radio.c \
led.c \
trace.c \
    main.c


S_SRC +=  \
CMSIS/CM3/DeviceSupport/EnergyMicro/EFM32/startup/cs3/startup_efm32.s

####################################################################
# Rules                                                            #
####################################################################

C_FILES = $(notdir $(C_SRC) )
S_FILES = $(notdir $(S_SRC) )
#make list of source paths, sort also removes duplicates
C_PATHS = $(sort $(dir $(C_SRC) ) )
S_PATHS = $(sort $(dir $(S_SRC) ) )

C_OBJS = $(addprefix $(OBJ_DIR)/, $(C_FILES:.c=.o))
S_OBJS = $(addprefix $(OBJ_DIR)/, $(S_FILES:.s=.o))
C_DEPS = $(addprefix $(OBJ_DIR)/, $(C_FILES:.c=.d))

vpath %.c $(C_PATHS)
vpath %.s $(S_PATHS)

# Default build is debug build
all:    debug


debug:    CFLAGS += -DDEBUG -O0 -g3
debug:    $(OBJ_DIR) $(LST_DIR) $(EXE_DIR) $(EXE_DIR)/$(PROJECTNAME).bin

release:  CFLAGS += -DNDEBUG -O3
release:  $(OBJ_DIR) $(LST_DIR) $(EXE_DIR) $(EXE_DIR)/$(PROJECTNAME).bin

base:     CFLAGS += -DDEBUG -O0 -g3
base:     $(OBJ_DIR) $(LST_DIR) $(EXE_DIR) $(EXE_DIR)/$(PROJECTNAME).bin

基本的に私がやりたいのは、それがベースターゲットで実行されている場合、main.cファイルをmainbase.cで変更したいということですC_SRC

私は今何時間も試しましたが、どこにも行きませんでした。何かアドバイス?

ありがとう!

4

1 に答える 1

6

GNU makeを使用している場合は、などのディレクティブを使用できますif

ドキュメントのMakefileの条件付きパーツを参照してください。

あなたがそうするならば、あなたはこのようにそれをすることができます:

C_SRC +=  \
CMSIS/CM3/CoreSupport/core_cm3.c \
....
led.c \
trace.c

ifeq ($(SPECIAL),"")
C_SRC += main.c
else
C_SRC += main_special.c
endif

makeコマンドラインで呼び出すときに、変数を設定するとSPECIALファイルmain_special.cが使用され、それ以外の場合main.cはファイルが使用されます。

使用するためのコマンドラインmain_special.c

$ make SPECIAL=1
于 2012-10-18T13:09:15.483 に答える