c中未定义的引用

时间:2015-05-19 07:12:13

标签: c makefile

虽然这听起来像是一个小问题,但我面临一个奇怪的情况。 我正在尝试构建的项目有一个组织良好的文件。每个应用程序模块都保存在一个单独的文件夹中,其中包含源(* .C)并包含子文件夹中的文件。每个文件夹都有一个make文件,驱动器中有一个master make文件。 我在其中一个模块中添加了一个C源文件。如果我从保存在不同文件夹中的c文件中调用一个函数,它会给出一个错误“未定义的引用”,尽管有很多函数是从不同模块的C文件中保存的不同C文件中调用的。

我猜make文件需要修改。但我是一个使用make的初学者。我无法弄清楚要修改什么以及在哪里。

1 个答案:

答案 0 :(得分:1)

Makefile将根据一些规则(由:标识)编译您的文件。

如果您的Makefile以编译每个.c文件(我推荐)的方式编写,您可能必须自己编写新文件的规则。

规则是这样构建的:

rulename: dependencies
    command1
    command2
    command3...
    ...

rulename是规则的名称。这通常是您要从.c文件中获取的.o文件的名称。 dependencies是此规则所依赖的文件" (意思是如果任何文件发生变化,规则就会过时,并且必须再次制作#34;) command[n]制作此规则时要使用的shell命令。这些命令在的每个shell中运行 (这意味着您无法在另一行中执行cd ....然后gcc -c ....,您必须同时执行这两项命令同一行:cd .... && gcc -c ....)。

一个具体的例子应该是:

my_file.o: my_file.c my_file.h main_header.h other_things.h
    gcc -o my_file.o -c my_file.c

将此文件放在同级别的Makefile中,作为.c文件 如果您的源文件位于子文件夹中且此级别没有Makefile,请将其放入最近的文件中,并在调用gcc时添加路径。

编写规则时可以使用rule-writing shortcuts and variables