您的位置:首页 > 其它

命令行编译的一点碎碎念

2016-02-16 20:02 225 查看
自学习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这些使用的库,安装到系统中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: