Linux常见编译系统总结

原链接:(http://community.bwbot.org/topic/183)[http://community.bwbot.org/topic/183]
运行测试平台:小强ROS机器人

在Linux系统中经常会遇到各种编译程序的方法。很多情况下我们只知道这样做而不知道为什么这样做。这篇文章就通过一个简单的hello world程序来通过不同的编译方式进行编译。让大家了解一下比较常见的各种编译系统。编译过程最重要的地方就是指定头文件和链接库的位置。主要问题在于软件的模块化和依赖关系。所以不同的编译系统采用了不同的方式进行管理。

cmake

cmake是一个很常用的编译系统。通过它可以方便的配置程序的各种编译参数。具体的介绍可以看这篇文章
下面是一个具体的例子
创建一个CMakeLists.txt文件,文件内容如下

cmake_minimum_required(VERSION 2.8.3)

project(helloworld)

add_executable(helloworld
  main.c
)

创建一个叫做main.c的文件,文件内容如下

#include <stdio.h>

int main(void){
    printf("hello world!\n");
}

编译过程

mkdir build
cd build
cmake ..
make

文件夹内容如下
0_1492224768568_Screenshot from 2017-04-15 10-52-17.png
执行结果
0_1492224801960_Screenshot from 2017-04-15 10-53-14.png
程序说明
这个一个简单的CMakeLists.txt文件,没有涉及到软件依赖的问题。CMake的强大之处就是其软件包管理能力。具体的使用方法可以看这篇文章

autotools

在Linux中使用源码编译程序中经常会有这个过程

./configure
make
make install

这种方式使用的就是autotools
还是以一个hello world为例。创建一个configure.ac文件,文件内容入下

AC_INIT([helloworld], [0.1], [george@thoughtbot.com]) # 指定项目名称, 版本号, 项目管理人员
AM_INIT_AUTOMAKE # 初始化
AC_PROG_CC  # 检查C的环境依赖
AC_CONFIG_FILES([Makefile]) # 指定Make File
AC_OUTPUT # 生成脚本

创建一个Makefile.am,文件内容如下

AUTOMAKE_OPTIONS = foreign  # 说明这是一个foreign的程序
bin_PROGRAMS = helloworld  # 生成文件的名称
helloworld_SOURCES = main.c # 指定源文件

然后执行下面的指令进行编译

aclocal # Set up an m4 environment
autoconf # Generate configure from configure.ac
automake --add-missing # Generate Makefile.in from Makefile.am
./configure # Generate Makefile from Makefile.in
make distcheck # Use Makefile to build and test a tarball to distribute

这时候可以看到一个helloworld-0.1.tar.gz的文件。这个就是最终生成的发行版本。解压后就可以按照正常的编译过程进行编译。

程序说明
configure.ac文件是autoconf工具的配置文件,用于生成最后的configure文件 . Makefile.am用于生成makefile。具体的使用方法可以看这篇文章

pkg-config

pkg-config不是一个完整的编译系统,只是一个编译工具,可以方便的给程序指cflags。下面是一个例子
假设系统中安装了OpenCV

pkg-config opencv-3.2.0-dev --cflags
终端输出
-I/opt/ros/kinetic/include/opencv-3.2.0-dev/opencv -I/opt/ros/kinetic/include/opencv-3.2.0-dev
pkg-config opencv-3.2.0-dev --libs
终端输出
-L/opt/ros/kinetic/lib -lopencv_stitching3 -lopencv_superres3 -lopencv_videostab3 -lopencv_aruco3 -lopencv_bgsegm3 -lopencv_bioinspired3 -lopencv_ccalib3 -lopencv_cvv3 -lopencv_datasets3 -lopencv_dpm3 -lopencv_face3 -lopencv_fuzzy3 -lopencv_hdf3 -lopencv_line_descriptor3 -lopencv_optflow3 -lopencv_plot3 -lopencv_reg3 -lopencv_saliency3 -lopencv_stereo3 -lopencv_structured_light3 -lopencv_phase_unwrapping3 -lopencv_rgbd3 -lopencv_viz3 -lopencv_surface_matching3 -lopencv_text3 -lopencv_xfeatures2d3 -lopencv_shape3 -lopencv_video3 -lopencv_ximgproc3 -lopencv_calib3d3 -lopencv_features2d3 -lopencv_flann3 -lopencv_xobjdetect3 -lopencv_objdetect3 -lopencv_ml3 -lopencv_xphoto3 -lopencv_highgui3 -lopencv_videoio3 -lopencv_imgcodecs3 -lopencv_photo3 -lopencv_imgproc3 -lopencv_core3

编译的时候就不用手动指定库了。pkg-config的配置文件在/usr/lib/pkgconfig, 可以在这里看到每个软件包的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值