我试图了解makefile如何工作很长时间(但是,非常不均匀)。我认为,即使有一堆关于makefile的讨论,这是第一个模板结构的模板,看起来很通用,所以我希望主持人不会关闭这个问题。
我在不同的c文件中有几部分代码,但都在同一个文件夹中:
1)frprmn.c
2)mnbrak.c
3)nrutil.c
4)linmin.c
5)f1dim.c
6)dbrent.c
这些代码来自Numerical Recipes,可在其他地方找到。
主要功能在frprmn.c中。 makefile是
program_NAME := MINIMIZE
program_C_SRCS := $(wildcard frprmn.c mnbrak.c nrutil.c linmin.c f1dim.c dbrent.c)
#program_CXX_SRCS := $(wildcard *.cpp)
program_C_OBJS := ${program_C_SRCS:.c=.o}
#program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.o}
#program_OBJS := $(program_C_OBJS) $(program_CXX_OBJS)
#program_INCLUDE_DIRS :=
#program_LIBRARY_DIRS :=
#program_LIBRARIES :=
#CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
#LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
#LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))
.PHONY: all clean distclean
all: $(program_NAME)
$(program_NAME): $(program_OBJS)
$(LINK.cc) $(program_OBJS) -o $(program_NAME)
clean:
@- $(RM) $(program_NAME)
@- $(RM) $(program_OBJS)
distclean: clean
"模板"对于makefile来自this tutorial。我在修改它时试图遵循解释。绝不是我预期它会起作用,因为我没有得到以下的东西:
为什么我们不需要头文件链接库。或者我们呢?也许本教程的作者依赖它作为常识......
为什么我需要每个c文件的目标文件?我只需要一个:frprmn.c。我该怎么做?
makefile如何知道哪个文件包含main-function?
当我运行它时,我收到以下错误
c ++ -o MINIMIZE clang:错误:没有输入文件 make:*** [MINIMIZE]错误1
我不知道我在那里得到c ++是怎么回事。根据教程,我已经注释掉所有与c ++相关的行。我的猜测是它使用C ++编译器作为默认编译器,在这种情况下,如何告诉它使用gcc而不强制它?
foreach includedir
我只是在那里列出它们吗?
有人能举个例子吗?
提前致谢!