Linux下编程01

一、准备工作

安装配置C++编译环境

二、g++编译

g++编译单文件
首先创建一个文件夹来存放C++代码
新建一个.cpp文件

#include<iostream>
using namespace std;
int main(int argc,char** argv)
{
	cout<<"cme19069"<<endl;
	return 0;
}

只编译

g++ -o main.o -c main.cpp

链接

g++ -o myid main.o

运行

./myid

在这里插入图片描述
g++编译多文件
新建两个文件,分别命名为func.cpp和func.h,分别写入如下内容

#include "func.h"

void print_func1(void)
{
	cout<<"using func1—dzg"<<endl;
}
#ifndef _FUNC_H
#define _FUNC_H
#include<iostream>
using namespace std;
void print_func1(void);
#endif

创建一个.cpp文件,写入以下内容

#include "func.h"

int main(int argc,char** argv)
{
	print_func1();
	return 0;
}

编译

g++ -o main.o -c main.cpp
g++ -o func.o -c  func.cpp

链接

g++ -o myid main.o func.o

运行

./myid

在这里插入图片描述
练习:实现函数打印 using func2–学号
在这里插入图片描述

三、Makefile编译

makefile文件结构如下

target: prerequisites 
          command

target也就是一个目标文件,可以是Object File,也可以是执行文件,还可以是一个标签。

prerequisites就是,要生成那个target所需要的文件或是目标。

command也就是make需要执行的命令。(Shell命令)

Makefile编译普通工程
创建一个Makefile文件并写入以下内容
在这里插入图片描述
在终端中输入
(1)make
(2)make cme19069.o
在这里插入图片描述
Makefile编译带动态库的工程

首先复制一份c++文件夹及目录下的文件,接着切换到c++so中将func.cpp编译成动态库

cp -r /home/charles/Desktop/C++_code /home/charles/Desktop/c++so
cd /home/charles/Desktop/c++so
g++ func.cpp -fPIC -shared -o libfunc.so

会生成一个libfunc.so文件,即我们需要的动态库
创建一个文件夹,将func.h和libfunc.so放入该文件夹
在这里插入图片描述
接下来修改main.cpp文件

#include "func.h"
int main(int argc,char** argv)
{
	print_func1();
	return 0;
}

接下来需要修改makefile,在makefile修改中需要在编译的时候指向头文件,在链接的时候指向动态库,同时为了方便可采用shell中变量赋值的方式进行修改,最终的makefile如下(特别需要注意inc和libs这个路径到底要指向哪里)
在这里插入图片描述
利用cmake生成makefile
1、创建一个cmake的文件夹用来放置实验要用的文件,然后在cmake中将如下代码放入main.cpp文件中

#include<iostream>
using namespace std;
int main(int argc,char** argv)
{
	cout<<"dzg"<<endl;
	return 0;
}

2、创建CMakeLists.txt文件,并在文件内填入如下内容

PROJECT(myid)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
add_executable(myid main.cpp)

3、运行生成makefile

cmake .
make -j8

在这里插入图片描述
利用cmake生成多文件工程的makefile
1、利用cmake生成多文件工程的makefile
仿照makefile编译多文件工程的方式建立main.cpp func.cpp func.h三个文件
在这里插入图片描述
2、编辑CMakeLists.txt,主要要指定源代码的位置在哪即可

PROJECT(myid)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
AUX_SOURCE_DIRECTORY(/home/charles/Desktop/c++so/cmake02/ DIR_SRCS)
ADD_EXECUTABLE(myid ${DIR_SRCS})

3、配置并编译
在这里插入图片描述
接下来完成带有动态链接库的工程的cmake配置
1、将前面makefile编译带动态库的动态库和头文件所在的文件夹拷贝到当前目录下,并删除func.cpp
在这里插入图片描述
2、编译带有动态库需要指定头文件目录,因此需要加下以下语句
include_directories(/home/carl/cmake/lin)

3、链接带有动态库需要指定链接库,虚词需要添加以下语句,这样g++才能链接到动态库
target_link_libraries(myid /home/carl/cmake/lin/libfunc.so)

4、最终的CMakeLists.txt内容如下
在这里插入图片描述
5、生成makefile并编译,效果如下
在这里插入图片描述
最后,可以利用cmake配置makefile将我们所写的程序或者动态库打包成deb包

1、只要在CMakeLists.txt中添加如下信息

#设置安装目录
set(CMAKE_INSTALL_PREFIX "/home/charles/Desktop/c++so/cmake02/install")
#拷贝依赖库头文件
set_target_properties(myid PROPERTIES  PUBLIC_HEADER "/home/charles/Desktop/c++so/cmake02/dzg/func.h")
install(TARGETS myid 
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    PUBLIC_HEADER DESTINATION include
)
#拷贝依赖库到lib目录下
install(FILES /home/charles/Desktop/c++so/cmake02/dzg/libfunc.so  DESTINATION lib)

2、请将以下信息改成自己的,需要出现学号信息,作为最后截图用

#设置deb包信息
set(CPACK_SET_DESTDIR ON) 
set(CPACK_PACKAGE_NAME "myid")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "myid")
set(CPACK_PACKAGE_VENDOR "myid")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_CONTACT "dzg")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_RPM_PACKAGE_GROUP "myid")
set(CPACK_RPM_PACKAGE_URL "CME19069 dzg")
set(CPACK_RPM_PACKAGE_DESCRIPTION "myid")
set(CPACK_PACKAGE_RELEASE 1)
set(CPACK_RPM_PACKAGE_LICENSE "myid")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "func")
# 设置默认生成器
set(CPACK_GENERATOR "DEB")
include(CPack)

3、配置并生成deb包

cmake .
make package

在这里插入图片描述
4、通过三个命令查看deb包的信息
dpkg-deb -W 包名 #查看信息
dpkg-deb -c 包名 #安装这个包会提供哪些文件
dpkg-deb -I 包名 #包具体信息
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值