Linux下编程01

Linux下编程01,第1张

Linux下编程01 一、准备工作

安装配置C++编译环境

二、g++编译

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

#include
using namespace std;
int main(int argc,char** argv)
{
	cout<<"cme19069"< 

只编译

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"< 
#ifndef _FUNC_H
#define _FUNC_H
#include
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
using namespace std;
int main(int argc,char** argv)
{
	cout<<"dzg"< 

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 包名 #包具体信息

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5651843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存