用于扩展库的可移植C Makefile

时间:2018-03-28 00:29:30

标签: c makefile

我试图了解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。我在修改它时试图遵循解释。绝不是我预期它会起作用,因为我没有得到以下的东西:

  1. 为什么我们不需要头文件链接库。或者我们呢?也许本教程的作者依赖它作为常识......

  2. 为什么我需要每个c文件的目标文件?我只需要一个:frprmn.c。我该怎么做?

  3. makefile如何知道哪个文件包含main-function?

  4. 当我运行它时,我收到以下错误

    c ++ -o MINIMIZE clang:错误:没有输入文件 make:*** [MINIMIZE]错误1

  5. 我不知道我在那里得到c ++是怎么回事。根据教程,我已经注释掉所有与c ++相关的行。我的猜测是它使用C ++编译器作为默认编译器,在这种情况下,如何告诉它使用gcc而不强制它?

    1. 所有占位符,嗯,甚至认为在这种情况下我不需要它们,我仍然希望最终能够使用它们。我该怎么办
    2.   

      foreach includedir

      我只是在那里列出它们吗?

      有人能举个例子吗?

      提前致谢!

0 个答案:

没有答案