命令行编译的一点碎碎念

自学习C/C++以来,接触到很多很强大的库,例如opencv,boost等等,但相关的范例和教程书,都提倡在电脑上安装这些库,在一定程度上我是很讨厌这么干的,而是提倡使用命令行编译生成可执行文件,在命令行中注明头文件的位置和库文件的位置。

这么做一方面透明性高,自己在编译时知道使用了什么库,什么头文件,很方便debug。

二来,可以提高可移动性,如果将opencv库编译成链接库文件,安装在/usr/libs/文件夹下,linux系统编译我们的源程序时,自然能够找到这些头文件和库文件,因为这是linux默认的寻找库文件的位置,但是该工程文件夹复制到windows或者mac系统中编译,就会出错。 因为文件系统是不一样的,而如果我们使用命令行编译,就可以避免这样的问题。

 

以编译一个调用了boost库文件的程序test.cpp为例:

#include "boost/lambda/lambda.hpp"
#include <iostream>
#include <iterator>
#include <algorithm>

int main(int argc, char* argv[])
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;

std::for_each(in(std::cin), in(), std::cout<<(_1*3)<<" ");
}

 

如果头文件和源文件放在一个文件中,

命令行:$g++  -I  (path to boost file) test.cpp -o test

-I代表include, path to boost file是用户下载并解压出的boost文件夹,存在的位置,以windows系统为例: 我存放的位置是 C:\Users\s145019\Downloads\boost_1_60_0

则命令行为:$g++ -I  C:\Users\s145019\Downloads\boost_1_60_0  test.cpp -o test

生成可执行文件test。

如果头文件和对应的源文件没有放在一个文件中,而是分至在两个不同的文件夹中,

则命令行为:$g++  -I  (path to head file)  -L (path to library file) -l  ***  test.cpp -o test

-L代表library,path to library file 代表库文件存放的位置。  -l ***代表需要用到的动态或者静态链接库

 

PS: 如果有必要也可以将Opencv或者boost这些使用的库,安装到系统中

 

posted @ 2016-02-16 20:02  雨落无声2002  阅读(189)  评论(0编辑  收藏  举报