C++编译环境

g++编译单文件

1、/home/carl下创建一个c++的文件夹

mkdir -p /home/carl/c++  

     (加上-p防止上一级路径不存在)

 2、新建一个main.cpp源代码文件,文件内容使用c++打印出自己的学号

gedit main.cpp

3、使用g++编译并链接main.cpp文件,只编译g++ -o main.o -c main.cpp   (-o:指定生成可执行文件的名称 -c:只编译不链接,只生成目标文件。)

链接g++ -o myid main.o

运行./myid

 

 g++编译多文件

 1、新建两个文件,分别命名为func.cppfunc.h,分别写入如下内容

#include "func.h"

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

2、修改main.cpp文件,内容如下

#include "func.h"

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

3、使用g++编译并链接多个cpph文件

编译

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

g++ -o func.o -c  func.cpp
链接

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

./myid

 

 

Makefile编译普通工程

1、前面编译用的命令如下,替换用makefile来表示,形式如下

编译

g++ -o main.o -c main.cpp      main.o:main.cpp
	                           g++ -c main.cpp
                              shell命令


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

链接

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

2、将上述命令写入名为Makefile的文件 

 

3、在终端中打入

(1)make     rm -f main.o

(2)make main.o     rm -f main.o

(3)make func.o    rm -f func.o

(4)make myid

观察(1)(2)对应的输出结果,可以知道makemake main.o的效果是一致的

4、那么为了执行make就完成编译链接,就应该把最后一个目标拿到第一个,结果如下 

 

 5、经常在编译完成后我们经常需要清理中间文件,或者有时希望清理掉所有编译链接生成的文件,因此可以添加clean这个规则

 

 Makefile编译带动态库工程

1、接下来介绍需要链接外部动态库工程的makefile的书写

当有些函数经常需要使用时,比如日志系统函数,我们可以把它封装成动态库或者静态库(这边可自行查找下动态库和静态库的区别)。

在例子中,我们将func.cppfunc.h这个功能函数封装成libfunc.so动态库

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

cp -r /home/carl/c++ /home/carl/c++so

cd /home/carl/c++so

g++ func.cpp -fPIC -shared -o libfunc.so

  

3、如图,运行完后,会出现一个libfunc.so文件,即我们需要的动态库

 解锁命令

sudo chmod -R 777 /home/carl/c++so

 4、接着以自己学号创建一个文件夹,将func.hlibfunc.so放入该文件夹下,此时完全可以将func.cpp这个文件删掉

 5、接下来修改main.cpp文件,内容如下

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

 5、我们需要修改makefile,在makefile修改中需要在编译的时候指向头文件,在链接的时候指向动态库,同时为了方便可采用shell中变量赋值的方式进行修改,最终的makefile如下(特别需要注意inclibs这个路径到底要指向哪里

 

 利用cmake生成makefile

1、创建一个cmake的文件夹用来放置实验要用的文件,然后在cmake中将如下代码放入main.cpp文件中

mkdir cmake
gedit main.cpp
#include<iostream>
using namespace std;
int main(int argc,char** argv)
{
	cout<<“lin”<<endl;
	return 0;
}

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

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

3、运行生成makefile运行cmake .

可以看见已经生成了makefile

 

4、剩下的就是编译和链接运行命令make -j8

 

 

 

1、利用cmake生成多文件工程的makefile

仿照makefile编译多文件工程的方式建立main.cpp   func.cpp func.h三个文件

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值