Vs2012于Linux应用程序开发(2):图案

1.1     代码提示功能

在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的project进行扩展,这样VisualAssist就能够正常使用了。

此外,VS的智能感知不支持GCC的一些扩展,在做代码分析的时候可能出错。我们採用强制包括头文件的方式解决一部分问题:

注意,这个文件的目的是让VS可以进行代码的分析,而不是让VS具有编译这些代码的能力!!

这个头文件类似于这种:

#pragmaonce

// 本文件的作用仅在于使VS可以解决语法错误,而不在于让程序正确执行!

#define__attribute__(x)

#define__signed__ 
signed

#defineinline__inline

#defineBITS_PER_LONG  
4

#define_TIME_T

#define__inline__

#define__u64int

…….

1.2     代码编译

非常早之前,想通过移植GCC到cywin以下进行编译,最后放弃了。

当中一个原因是cywin的速度较慢,尽管是windows下的本地应用。但它的编译速度比虚拟机里执行gcc还是要慢不少。

究其原因,主要是cywin在模拟fork操作时使用的技术影响了其速度(见其他文章的分析)。

放弃cywin的还有一个原因是嵌入式Linux平台提供的编译器都是基于Linux的,非常难把这些编译器做移植。

因而我们採用远程编译的方法,当VS进行编译操作的时候,使用SSH登录到虚拟机的Linux系统中进行编译,再分析编译过程中产生的信息,将之转换为vs可以识别的信息。这样VS就行在IDE中正确定位发生错误的文件!

在这样的方式中。Make或者gcc生成的错误信息因为编译方式的不同产生的错误信息是有差异的,为了处理这样的差异,我们将这个过程用python来完毕。这样在不同的项目中仅仅须要对python脚本做少量改动就能够了。这个脚本全然能够做为项目的一部分。

这样的方式获得的还有一个优点是大大减少VS扩展的代码,从而保证了它不会影响到VS的稳定性。

1.3     生成过程控制

VS2012使用MSBUILD进行生成,它同意在一个项目改写自己的生成过程。将默认行为指向自己定义的扩展,这也是我们要採用的方式。

1.4     參数配置

对照VC和GCC的编译參数能够发现有非常多參数是同样的。如宏定义、附加文件夹等等,这部分能够直接使用。除此之外另一些特定的參数,我们通过为VS加入新的平台和属性页的方式进行支持。

这样我们能够通过VC的项目属性来配置GCC的特定參数。

对于Linux内核的配置,实际上是由scripts/kconfig/mconf或者scripts/kconfig/qconf程序来完毕的。事实上现过程是读取Kconfig文件生成菜单。再依据用户选择生成.config文件,我们将之简单改动全然能够在windows下进行配置:

在VS中依据project配置调用就能够轻松搞定。

1.5     调试

对于应用程序的调试,VS提供了调试器的引擎。我们扩展此调试器引擎,在调试时使用ssh连接到虚拟机的系统,或者直接连接到目标板。在其上使用gdb载入应用程序进行调试,或者使用gdb连接目标板的gdbserver进行调试。

我们将使用gdb的machine interface,而不是经常使用的交互接口。

驱动的调试尝试使用KGDB,没玩过,玩的时候再说吧。

1.6     project模板

在调试完毕后将UBOOT、LINUX等project固化成模板,就像这种:

1.7     辅助功能

将python控制台、ssh控制台、串口控制台集成到VS中,嘿嘿,够强大了吧~~~~

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-10-28 07:19:53

Vs2012于Linux应用程序开发(2):图案的相关文章

linux应用程序开发-文件编程-系统调用方式

在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧! 文件编程有两种方式,一是系统调用方式,二是库函数调用. 前者依赖特定的平台,后者不依赖平台. 系统调用:创建 int creat(const char *filename,mode_t mode); filename:要创建的文件名 mode:创建模式 S_IR

嵌入式Linux应用程序开发详解------(创建守护进程)

嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目录---chdir(): 4.重新设置文件权限掩码---umask(): 5.关闭所有的文件描述符---close(fdx): 6.设置daemon程序的任务---此例主要在while循环中体现. 下面是一个例子程序: /* daemon * how to create a daemon proce

[转载][献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南

[献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南. 前言,Linux/Unix 社区的版块不热闹,新手太多,高手太忙,偶把自己这几年的Linux学习的过程讲讲,希望能给大家有点帮助, 引导初学者学习的方向,少走弯路,事半功倍,同时也是抛砖引玉,请过来人热烈发言. 1. 首先熟悉 Linux  建议在 Windows 上安装 VMware Workstation 6.5.0(以下简称VM), 下载种子在 http://www.verycd.com上找. 安装好 

linux应用程序开发-文件编程-库函数

---恢复内容开始--- c库函数文件操作独立于具体的系统平台,可移植性较好. 库函数-创建和打开 FILE*fopen(const char*filename,const char*mode) mode:打开模式 常见的打开模式: r,rb:只读方式打开 w,wb: 只写方式打开,如果文件不存在,则创建该文件 a,ab:追加方式打开,如果文件不存在,则创建该文件 r+,r+b,rb+:读写方式打开 w+,w+b,wh+:读写方式打开,如果文件不存在,则创建该文件 a,a+b,ab+:读和追加方

linux应用程序开发-进程程序设计

学习之前必须了解基本的概念: 进程,线程,进程3种状态,进程调度以及4种算法,进程同步,死锁,记不清的找度娘. 获取ID #include<sys/types.h> #include<unistd.h> 获取本进程ID: pid_t getpid(void) 获取父进程ID: pid_t getppid(void) 举例: #include<stdio.h> #include<stdlib.h> #include<unistd.h> int ma

linux应用程序开发-进程通信(IPC)

IPC why: 1.数据传输 2.资源共享 目的: 3.通知事件 4.进程控制 发展: 1.UNIX进程间通信 2.基于SYStem V 3.POSIX 方式分类: 1.pipe(管道) FIFO(有名管道) 2.signal 3.消息队列 4.共享内存 5.信号量 6.套接字(socket) 管道通信:单向,先进先出 创建 pipe:父子之间通讯 FIFO:任意 创建: int pipe(int filedis[2]); 管道创建时,产生两个文件描述符:filedis[0]读管道,filed

初识linux端c++程序开发

关于linux端程序开发,我以前一直不知道是做些什么,只是感觉听高端的.最近接触了一些,有了一些初步的认识. 首先,linux是一个操作系统,跟windows一样:接通电源.按下电脑开机,电脑就会自动加载运行的系统软件.操作系统是电脑不可缺少的一部分.操作系统是你的电脑实体和实用方便的软件中间的媒介.linux也是这样,而我做的,就是编写一些能在linux上面编写.编译.生成一些可以在linux上面运行的软件. windows这么好用,为什么我们还要用linux系统呢?这两个操作系统是有区别的.

5. Linux应用程序地址布局

程序构成: 在学习Linux应用程序开发时,经常会遇到如下概念:代码段.数据段.BSS段(Block Started by Symbol,又名:未初始化数据段) .堆(heap)和栈(stack).而这些部分也是构成Linux应用程序的重要组成部分. 内存布局: 当Linux应用程序在内存中运行的时候,以上组成部分在内存中布局: 从低地址到高地址分别为:代码段.数据段.BSS段.堆.栈. 堆向高内存地址生长. 栈向低内存地址生长. 下面测试下面的程序: 查看系统的线程: 下面我们看这代码的地址分

Linux 应用程序 之 IO编程(一)

我的linux 环境是windows8.1 + VMware6.5.1+  Fedora14,参考书籍:第六章 链接:Linux应用程序开发详解(1-11).pdf 我利用一个SSH软件SSH Secure File Transfer Client 来从Linux传输文件 来张虚拟机运行Fedora的图: 下面步入正题: IO最基本操作: 1 //hello.c 2 #include <unistd.h> 3 #include <sys/types.h> 4 #include &l