3

我是使用 makefile 的新手,我有一些 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

阿姆里

4

3 回答 3

6

本质上,makefile 会根据某些变量的状态进行一系列检查并添加编译器标志。例如:

ifeq ($(DEBUG), true)

CFLAGS+=-DDEBUG -g

endif

如果 DEBUG 变量 $(DEBUG) 设置为 true,则定义宏 DEBUG,并将编译器设置为输出调试二进制文件 (-g)。

其他所有语句的模式大致相同。

于 2008-11-24T18:21:40.453 回答
5

这将检查环境变量的值并使用编译器的特定选项配置构建过程(我认为)。

于 2008-11-24T18:20:33.827 回答
2

CFLAGS 是一串参数,在调用它时将传递给 C 编译器。

如果您不知道参数的含义,则需要查看 C 编译器的帮助。例如:

man cc
man gcc
cc --help
gcc --help
于 2008-11-24T20:36:56.920 回答