虽然这听起来像是一个小问题,但我面临一个奇怪的情况。 我正在尝试构建的项目有一个组织良好的文件。每个应用程序模块都保存在一个单独的文件夹中,其中包含源(* .C)并包含子文件夹中的文件。每个文件夹都有一个make文件,驱动器中有一个master make文件。 我在其中一个模块中添加了一个C源文件。如果我从保存在不同文件夹中的c文件中调用一个函数,它会给出一个错误“未定义的引用”,尽管有很多函数是从不同模块的C文件中保存的不同C文件中调用的。
我猜make文件需要修改。但我是一个使用make的初学者。我无法弄清楚要修改什么以及在哪里。
答案 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。