Ubuntu学习心得——运用篇——C++编译(CMake与g++)
FOR THE SIGMA
FOR THE GTINDER
FOR THE ROBOMASTER
在安装好了CMake后,提供了给我们的就是更加快捷的多文件协同编译的效果,本篇文章将会为大家介绍如何在Ubuntu16.04下进行C++编译,方法一为通过编写特定的CMakeLists进行当文件或多文件的编译,方法二则采用g++编译。
操作系统版本:Ubuntu16.04
http://www.ubuntu.org.cn/download/desktop 桌面版ubuntu16.04 下载
http://mirror.pnl.gov/releases/xenial/ Ubuntu系列镜像文件下载列表(amd64为64位,i386为32位)
CMake版本 CMake 3.15.0
https://cmake.org/download/ 官网下载地址
https://blog.csdn.net/whl970831/article/details/97143463 安装教程
虚拟机版本:VMware15(注意:如果可以的话尽量不要用虚拟机,容易出现崩坏显现,作者这里普遍采用桌面版的纯ubuntu系统来演示)
https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0
15版下载,密匙百度
参考:
https://blog.csdn.net/xiaoxiaodengzi/article/details/80312474
https://blog.csdn.net/mohe_wkk/article/details/81588674
更新:
2019.7.31 添加了关于g++更多编译操作方式(自定义可执行文件名,多文件编译)
首先检查一下CMake是否安装,打开终端输入:
cmake --version
确定返回3.x.x后进行下一步,新建一个文件夹在home里面并命名为s,同时在里面新建一个CMakeLists.txt与helloworld.cpp文件CMakeLists.txt里面的内容为:
cmake_minimum_required(VERSION 2.8)
#工程名
project(HELLOWORLD)
#包含原程序,即把给定目录下的源程序复制给变量DIR_SRC
aux_source_directory(./ DIR_SRC )
#生成程序
add_executable(HELLOWORLD ${DIR_SRC})
helloworld.cpp里面的内容为:
#include
int main()
{
std::cout<<"hello world!"<
在s文件夹里面新建一个文件夹命名为build
进入build文件夹里面后,依次输入:
cmake ..
make
编译好后会有相应的程序,运行它:
./HELLOWORLD
效果:
这里只是用的单文件,这里先展示一下如果有多个文件如何在CMakeLists里面进行书写:
#cmake 最低版本要求,低于2.6 构建过程会被终止,一般会写2.8
cmake_minimum_required(VERSION 3.8)
#定义项目名称
project(CMakeProject1)
set(CMAKE_CXX_STANDARD 14) #添加c++ 11标准支持
#提供了一个搜索头文件暂时的根目录
include_directories(.)
#/寻找OpenCV.CMakeLists,以此找到包,并赋值各库相关变量
find_package(OpenCV REQUIRED)
#提供了一个搜索头文件暂时的根目录
include_directories(${OpenCV_DIRS})
#声明从源生成的可执行目标
add_executable(CMakeProject1 | Armor_Detector.cpp main.app armor_detector.h)
#将应用程序与OpenCV库链接(链接库文件 )
target_link_libaries(CMakeProject1 ${OpenCV_LIBS})
通过g++编程就不用再写CMakeLists.txt,可以在终端中直接输入命令,运行
g++ helloworld.cpp -o test
运行
./test
当然如果需要引用其他库文件的话则可以这样,这里一编写opencv3为例子
新建一个文件并在里面添加文件(.cpp)与图片
frist.cpp里面的内容为:
#include
#include
#include
using namespace cv;
int main()
{
Mat img=imread("pic.jpg");
namedWindow("游戏原画");
imshow("游戏原画",img);
waitKey(6000);
}
要是按照之前的运行会出现下图
显示的是未定义的引用,也就是说你没有关联上它的库文件需要opencv.pc文件
输入
apt-file search opencv.pc
得到上图,显示路径位置(没有安装apt-file需要先执行apt install apt-file和apt-file update)
再次输入
pkg-config --cflags opencv
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
则为pkg配置搜索路径中找不到包opencv,需添加包含“opencv.pc”的目录到pkg_config_path环境变量
这个是否需要输入
apt-get install libopencv-dev
再输入
g++ frist.cpp `pkg-config opencv --libs --cflags opencv`
就能正常编译了。(注意这里生成的可执行文件默认为a.out。)
可以输入下列来指定
g++ frist.cpp -o frist `pkg-config opencv --libs --cflags opencv`
其他的可以参考:
https://blog.csdn.net/dong1528313271/article/details/83041789
关于g++的简单使用
https://blog.csdn.net/juffson/article/details/78027336
g++使用----基本使用方法
https://www.cnblogs.com/mjk961/p/7862170.html
g++与多文件编译