Ubuntu学习心得——运用篇——C++编译(CMake与g++)

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++更多编译操作方式(自定义可执行文件名,多文件编译)

方法一:通过CMakeLists进行CMake

首先检查一下CMake是否安装,打开终端输入:

cmake --version

确定返回3.x.x后进行下一步,新建一个文件夹在home里面并命名为s,同时在里面新建一个CMakeLists.txt与helloworld.cpp文件Ubuntu学习心得——运用篇——C++编译(CMake与g++)_第1张图片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

Ubuntu学习心得——运用篇——C++编译(CMake与g++)_第2张图片效果:
Ubuntu学习心得——运用篇——C++编译(CMake与g++)_第3张图片这里只是用的单文件,这里先展示一下如果有多个文件如何在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++编译

通过g++编程就不用再写CMakeLists.txt,可以在终端中直接输入命令,运行

g++ helloworld.cpp -o test

运行

./test

当然如果需要引用其他库文件的话则可以这样,这里一编写opencv3为例子
新建一个文件并在里面添加文件(.cpp)与图片
Ubuntu学习心得——运用篇——C++编译(CMake与g++)_第4张图片frist.cpp里面的内容为:

#include
#include 
#include 
 
using namespace cv;
 
int main()
{
	Mat img=imread("pic.jpg");
	namedWindow("游戏原画");
	imshow("游戏原画",img);
	waitKey(6000);
}

要是按照之前的运行会出现下图
Ubuntu学习心得——运用篇——C++编译(CMake与g++)_第5张图片显示的是未定义的引用,也就是说你没有关联上它的库文件需要opencv.pc文件
输入

apt-file search opencv.pc

Ubuntu学习心得——运用篇——C++编译(CMake与g++)_第6张图片得到上图,显示路径位置(没有安装apt-file需要先执行apt install apt-file和apt-file update)
再次输入

pkg-config --cflags opencv

Ubuntu学习心得——运用篇——C++编译(CMake与g++)_第7张图片显示路径安装正常
但若显示为

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++与多文件编译

你可能感兴趣的:(Ubuntu,游戏开发)