最近有一个需求,一个目录下有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文件的目录下,运行就可以了。效果很让人满意。