【问题标题】:Compiling multiple C and header files with 1 main用 1 个 main 编译多个 C 和头文件
【发布时间】:2017-04-18 18:37:46
【问题描述】:

[我目录中的文件][1]

需要帮助在 make 文件中编译。

所以我有这个链接列表任务我正在做,方向是。 stringlist.h 应该包含节点和函数原型 stringlist.c 应该完成在 stringlist.h 中定义的功能。但是 stringlist.c 根本不应该包含 main 。然后,namelist.c 应该包含 main 并且只有 I/O,它只是应该调用 stringlist.c 中的命令函数。

所以要编译它,我们应该创建一个 make 文件。每当我尝试时,我都会收到一个错误,因为 main 不会在其中一个 c 文件中退出。在整个学期中,我们编译了这样的代码“gcc -std=gnu99 -m32 -Wall -g -o file file.c” 但它不起作用。

我将如何创建 make 文件?花了好几个小时还是搞不清楚。

【问题讨论】:

    标签: c makefile compilation main


    【解决方案1】:

    正如 Jonathan Leffler 所说,我提供的示例 Makefile 有一些不好的想法。这是一个改进:

    # compiler:
    CC = gcc
    
    # compiler flags: 
    CFLAGS  = -g -Wall
    
    # the build target executable:
    TARGET = executable
    
    # object files to build:
    OBJ = namelist.o stringlist.o
    
    all: $(TARGET)
    
    $(TARGET): $(OBJ)
            $(CC) $(CFLAGS) -o $(TARGET) $(OBJ)
    

    【讨论】:

      【解决方案2】:

      试试这个:

      OBJ := namelist.c stringlist.c
      GCC := gcc -g
      CFLAGS := -std=gnu99 -m32 -Wall
      
      compile: $(OBJ)
          $(GCC) $(CFLAGS) $(OBJ) -o executable
      

      【讨论】:

      • 试了一下,报错“make: *** No rule to make target '%(OBJ)', required by 'compile'. Stop.”
      • @Programmer 尝试将 'compile' 替换为 'all'。
      • hmm 很奇怪有一个类似的错误“make: *** No rule to make target '%(OBJ)', required by 'all'. Stop.”
      • @Programmer 也许您可以尝试(使用compile 而不是all)运行make compile
      • 就目前而言,宏名称OBJ 具有误导性(对人类而言),因为它指定的是源文件,而不是目标文件。当然,make 不在乎。我不相信使用名为compile 的规则来创建名为executable 的可执行文件是一个好主意。每次调用make 时都会无条件地重建程序。曾几何时,这很重要;对于足够大的项目,它仍然很重要。通常,您将目标 all: executable 作为顶级目标,然后制定从(源文件或)目标文件构建 executable 的规则。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多