作为一个集成开发环境,Visual Studio 的强大是无可否认的。其中一个让我欣赏的地方就是它的代码编辑器,特别是和 Visual Assist X 软件配合起来使用的时候,可以很好的减轻程序员写代码的负担。当然直接使用 Visual Studio 作为代码编辑器来写 ARM 程序是可以的,但是如果你不进行配置,每次要编译的时候都得重新打开 keil,很麻烦。为了解决这个问题,下面我将介绍如何在 Visual Studio 的环境下使用mdk 编译 ARM 程序。(这里讲的配置方法是不用写任何代码的哦亲!)
1.原理参考
要脱离一个 IDE 来编译程序,其中一个方法就是使用命令行,一行一行的敲命令,一个文件一个文件地编译。不过每次敲命令行这种方式的效率是极低的!绝对会让你抓狂的!那么就可以用一个批处理文件来做命令行的工作,但是悲剧的是我不知道怎么调用 mdk 的编译器和链接器来生成目标文件,我甚至连 bat 文件怎么写都不会。于是,不知道的时候要看看 mdk 的 help 文档,搜索关键字 “BAT”,不用费多少工夫就能找到说明了:
写了一个简陋的程序,用来自动修改 mdk 生成的 APP.BAT 文件的错误:
首先用这份代码创建一个 Windows 控制台应用程序,把可以把它生成的可执行文件改名为 error_check.exe ,复制到和 APP.BAT 的同一目录下,
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
#include <list>
char default_name[]="APP.BAT";
using namespace std;
int main(int argc,char *argv[])
{
char* name;
if(argc>1){
name=argv[1];
cout<<"文件名参数:"<<name<<endl;
}
else
name=default_name;
ifstream fi(name, ios::_Nocreate); // 不创建打开
if(!fi.is_open()){
cout<<"文件读打开失败"<<endl;
return 1;
}
// 读取文件到内存中
typedef list<string> LineList;
LineList list;
for(string line; getline(fi,line);){
//line.search
list.push_back(line); // 加入链表
}
bool shouldModify = false;
string subStr("fromelf.exe");
// 因为该 BAT 文件是 Keil 自动生成的,
// 错误只在最后一行,所以这里可以
// 只检查最后一个字符串的语法
string& s = list.back();
auto pos = s.find(subStr);
if(pos!=-1){
if((s.at(0)!='"')&&(s.at(pos+subStr.length())!='"')){
cout<<"find a syntax error :"<<endl
<<" "<<s<<endl
<<" "<<"missing ""<<endl;
shouldModify = true;
const char *quote = """;
s.insert(pos+subStr.length(), quote);
s.insert(0,quote);
cout<<"auto modify :"<<endl
<<" "<<s<<endl;
}
}
fi.close();
if(shouldModify){ // 如果需要修改文件,就把 list 的内容重新写入文件
ofstream fo(name, ios::_Nocreate); // 不创建打开
if(!fo.is_open()){
cout<<"文件写打开失败"<<endl;
return 1;
}
for(auto i=list.begin(); i!=list.end(); i++){
fo<<*i<<endl;
}
fo.close();
}
}
然后在 APP.BAT 的那个目录下,新建一个 arm_build.BAT 文件,文件内容为
error_check.exe
APP.BAT
其实很简单,就是调用 error_check.exe 去检查和修改 APP.BAT 的错误,然后再打开 APP.BAT 调用编译器。
然后再修改 visual studio 的外部工具里的设置就行了,不直接用 mdk 生成的 APP.BAT 了,改成自己写的 arm_build.bat
这样就不用每次用 keil 重新 build 以后又手动改错误了
用 KEIL 生成的 BAT 文件效率比较低,每次都要全部重新编译,我有点觉得他们是故意这样做的 = =
一周热门 更多>