我是使用makefile的新手,我有一些makefile。其中一个有我试图理解的这些陈述,但我不能。
# debugging support
ifeq ($(DEBUG), true)
CFLAGS+=-DDEBUG -g
endif
ifeq ($(DEBUG), gdb)
CFLAGS+=-g
endif
ifeq ($(PROFILING), true)
CFLAGS+=-p
endif
# symbolic names debugging
ifeq ($(DEBUG_NAMES), true)
CFLAGS+=-DDEBUG_NAMES
endif
# architecture TODO: add others
ifeq ($(ARCH), unix)
CFLAGS+=-DUNIX
endif
# TODO: GC settings
ifeq ($(HEAP), malloc)
CFLAGS+=-DHEAP_MALLOC
endif
ifeq ($(STACK), malloc)
CFLAGS+=-DSTACK_MALLOC
endif
# class loading method
ifeq ($(CLASS), external)
CFLAGS+=-DEXTERNAL_TUK
endif
# monitor allocation
ifeq ($(MONITORS), ondemand)
CFLAGS+=-DON_DEMAND_MONITORS
endif
阿姆里
答案 0 :(得分:6)
基本上makefile正在进行一系列检查,并根据某些变量的状态添加编译器标志。例如:
ifeq ($(DEBUG), true)
CFLAGS+=-DDEBUG -g
endif
如果DEBUG变量$(DEBUG)设置为true,则定义宏DEBUG,并将编译器设置为输出调试二进制文件(-g)。
其他每个陈述大致相同。
答案 1 :(得分:5)
这会检查环境变量的值,并使用编译器的特定选项配置构建过程(我认为)。
答案 2 :(得分:2)
CFLAGS是一个参数字符串,在调用它时将传递给C编译器。
如果您不知道参数的含义,您需要查看C编译器的帮助。例如:
man cc
man gcc
cc --help
gcc --help