请教多文件夹makefile问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教多文件夹makefile问题相关的知识,希望对你有一定的参考价值。

一般来讲,一个项目会有多个模块,源文件分别放在不同的目录文件夹中。
这时候,Makefile就需要遍历不同目录下的C程序源文件,然后分别编译成目标文件、然后再链接成可执行程序。
更深入的教程,可以参考Makefile工程实践视频教程,里面对源文件、目标文件、库分别使用目录进行管理,存放在不同的文件目录下,如何编写Makefile实现上面的目的。
参考技术A 在有.C文件的文件夹里都有makefile的存在,makefile的作用就是控制编译流程。
uboot源码的根目录下就有一个makefile文件。如果你想学习uboot,可以先看board目录里的makefile文件,这个文件告诉你电路板上电后,哪个函数先被执行。

请教简单的C++多文件连接问题(请针对问题对答,谢谢!)

//文件1是头文件
int Fabricate(int,int);
int Multi(int,int);

//文件2放一个函数Fabricate
int Fabricate(int m,int n)

return Multi(m,m-n+1)/Multi(n,1);


//文件3放一个函数Multi
int Multi(int m,int n)

int i,s=1;
for(i=m;i>=n;i--)
s*=i;
return s;


//文件4放main
#include<iostream.h>
#include"myheadfile.h"
using namespace std;
void main()

int m,n;
cout<<"请输入m";
cin>>m;cout<<endl;
cout<<"请输入n";
cin>>n;
cout<<endl<<"组合数为:"<<Fabricate(m,n);


我将四个文件的内容放在一个文件里编译成功,可是分成多个文件放在一个工程里连接时出现错误:

d:\program files\vc98\myprojects\123\fabricate.cpp(3):error C2065: 'Multi' : undeclared identifier

错误指向return Multi(m,m-n+1)/Multi(n,1); 这一行

请问是怎么回事?
谢谢!
------------------------------------------------------
在文件2中加了#include"myheadfile.h" 后反而出现两个错误:

Linking...

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16

Debug/123.exe : fatal error LNK1120: 1 unresolved externals

Error executing link.exe.

是怎么回事呢,真搞不懂

文件2和文件3需要包含文件1。其实头文件的作用就是声明。从理论上讲,文件3不需要包含文件1,但包含进来是一个习惯写法。
至于选了win32 Application的话,在Project -> Setting -> C++ -> Project Option中找到"_WINDOWS",删掉,或者改成"_CONSOLE"。
参考技术A 你需要在文件2中也加入一行
#include"myheadfile.h"
参考技术B \fabricate.cpp里面没有包含头文件,把头文件加进去 #include"myheadfile.h" 还要声明

别跟我说你选了win32 Application? 不然怎么会有winmain做入口?
参考技术C 哇‘‘看不懂也 ‘但还是要冒个泡

以上是关于请教多文件夹makefile问题的主要内容,如果未能解决你的问题,请参考以下文章

[Makefile]多目录Makefile写法

请教点简单的Makefile文件语法,高手请进

利用Makefile给多文件多目录C源码建立工程

请教简单的C++多文件连接问题(请针对问题对答,谢谢!)

多文件使用linux进行编译

cmake编译单/多文件