命令行编译的一点碎碎念
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这些使用的库,安装到系统中
这么做一方面透明性高,自己在编译时知道使用了什么库,什么头文件,很方便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这些使用的库,安装到系统中
相关文章推荐
- Android 从系统图库中选择图片
- CSS定位之position详解
- Java实现Mysql数据库自动备份
- 通过ios实现RSA加密解密中的 NSString+Base64.h/m相关代码
- 华为oj 购物单
- 文本框获得焦点
- android-activity
- 使用JNI实现Java与C之间传递数据
- 小纪的作业题
- Realm Java 简明教程(1)
- PHP创建缩略图
- 中国芯片,如何“断奶”?
- 蓝桥杯基础练习 十进制转十六进制 读题漏了条件
- mybatis的#{}和${}的区别以及order by注入问题
- 二叉树层次遍历(C语言实现)
- JavaScript中的数据类型
- sublime_text3 用户配置
- 类概述
- 通过ios实现RSA加密解密中的 NSData+Base64.h/m相关代码
- kettle使用命令行来运行ktr和kjb