2012-10-18 146 views
1

我現在有一個make文件,其中一部分如下所示。條件編譯Makefile中

#################################################################### 
# 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 

從本質上講就是我想要做的是,如果它與基本目標運行,那麼我想mainbase.c

我已經嘗試了幾個小時,現在改main.c文件中C_SRC並沒有得到它的地方。有什麼建議?

謝謝!

+0

還有一個更簡單的方法,但是你有沒有告訴我們的規則,建立事物的實際配方休息。 – Beta

回答

4

如果您使用的GNU讓那麼你可以使用指令,如if和類似。

Conditional Parts of Makefiles的文件中。

如果情況下,你可以做到這一點是這樣的:

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 
+0

完美!謝謝! –

+1

使用當前版本的Make you need括號。 'IFEQ($(SPECIAL), 「」)' – arapEST