命令行编译的一点碎碎念

自学习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这些使用的库,安装到系统中

 

转载于:https://www.cnblogs.com/cbyzju/p/5193753.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值