安装配置C++编译环境
二、g++编译g++编译单文件
首先创建一个文件夹来存放C++代码
新建一个.cpp文件
#includeusing 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 #includeusing 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三、Makefile编译
练习:实现函数打印 using func2–学号
makefile文件结构如下
target: prerequisites commandtarget也就是一个目标文件,可以是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文件中#includeusing 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 包名 #包具体信息
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)