您的位置:首页 > 其它

如何批量编译连接程序?

2012-07-23 21:42 375 查看
最近有一个需求,一个目录下有N多个.c文件,想办法把它们全部编译。

用VC建个工程把它们全扔进去构建是不行的,连接的时候会出错,因为VC最后只想生成一个exe文件,这样最后只能得到一堆obj文件。

后来知道了VC的编译器是cl.exe(如果你的cmd不识别cl,请查看这篇文章:http://blog.csdn.net/wangningyu/article/details/4830920,设置环境变量),可以在命令行中使用,然而用它也不能一个cl *.*完事,结果还是和上面一样,link不了,只能一次让它编译连接一个文件,而那么多文件我不可能手动一个一个地输入回车。于是我想只要写个程序遍历这个目录下所有.c文件然后调用命令行让cl编译不就行了?

于是做了这样一个程序:

// use.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "use.h"
#include <cstdlib>
#include <cstring>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	
	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
		// TODO: change error code to suit your needs
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else {
		// TODO: code your application's behavior here.
		CFileFind   finder; 
		BOOL bWorking = finder.FindFile("*.c"); 
		while (bWorking) { 
			bWorking = finder.FindNextFile();
			char szTemp[MAX_PATH];
			sprintf(szTemp, "cl %s", finder.GetFilePath());
		//	cout << szTemp << endl;
			system(szTemp); // 调用命令行
		} 
		
	}
	
	return nRetCode;
}
把这个程序放到存放.c文件的目录下,运行就可以了。效果很让人满意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: