当前位置: 首页 > news >正文

免费发布卖车信息网站百度问答我要提问

免费发布卖车信息网站,百度问答我要提问,百度site wordpress定制webapp,帝国和织梦哪个做网站好目录 生成可执行程序生成动态库生成静态库 我们编写的C代码不仅仅只是为了生成可执行程序,有的时候可能是为了生成动态库或者静态库,那么如果用cmake来构建的话,应该怎么做呢,怎么指定是生成可执行程序,还是生成动态库…

目录

  • 生成可执行程序
  • 生成动态库
  • 生成静态库

我们编写的C++代码不仅仅只是为了生成可执行程序,有的时候可能是为了生成动态库或者静态库,那么如果用cmake来构建的话,应该怎么做呢,怎么指定是生成可执行程序,还是生成动态库或者静态库呢,这篇文章我们用简单的demo聊一下这些内容。

示例使用安装了vs2022的Windows系统,使用vscode编辑器。

生成可执行程序

先看一下demo的结构
在这里插入图片描述

结构很简单,只有一个用来生成可执行程序的源文件main.cpp和一个指定构建规则的CMakeLists.txt文件。

其中main.cpp的内容如下

// main.cpp#include <iostream>int main()
{std::cout << "demo" << std::endl;return 0;
}

这个main.cpp就不解释了。

然后看下CMakeLists.txt的内容

cmake_minimum_required(VERSION 3.26)project(demo)add_executable(${PROJECT_NAME} main.cpp)

这几条指令的作用:

  • cmake_minimum_required(VERSION 3.26):指定cmake最低版本,如果构建时使用的cmake低于这个版本就会报错,主要是为了避免出现兼容问题。
  • project(demo):设置项目名称为demo,这条指令还可以设置版本以及程序语言等信息,但是一般不需要,设置项目名称就可以了。
  • add_executable(${PROJECT_NAME} main.cpp):这条指令的作用是指定项目目标为生成可执行程序,同时指定可执行程序的文件名为PROJECT_NAME变量的值(这个文件名是不带后缀名的文件名,具体后缀名会根据所处系统环境自动生成,PROJECT_NAME变量的值是最近的一次使用project()设置的项目名称),以及指定生成可执行程序使用的源文件为main.cpp。

编写好这几个文件之后,我们在demo目录下先执行命令cmake -B build生成构建系统,然后执行命令cmake --build build --config Debug就可以构建出可执行程序了。

在这里插入图片描述

生成动态库

同样先看一下demo结构
在这里插入图片描述

结构也很简单,包括用来生成动态库的源文件demo.cpp,头文件demo.h和demo_config.h,以及一个指定构建规则的CMakeLists.txt文件。

先看一下C++代码

// demo_config.h#ifndef DEMO_CONFIG_H
#define DEMO_CONFIG_H#ifdef DEMO_EXPORT#define DEMO_API __declspec(dllexport)
#else#define DEMO_API __declspec(dllimport)
#endif#endif
// demo.h#ifndef DEMO_H
#define DEMO_H#include "demo_config.h"class Demo
{
public:Demo() = default;~Demo() noexcept = default;DEMO_API void Func();
};#endif
// demo.cpp#include "demo.h"#include <iostream>void Demo::Func()
{std::cout << "demo" << std::endl;
}

代码很简单就不解释了,重点是要解释CMakeLists.txt文件的内容。

看一下这个CMakeLists.txt文件的内容,这个会比上面生成可执行程序的那个demo稍微复杂一些。

cmake_minimum_required(VERSION 3.26)project(demo)include_directories(include)add_definitions(-DDEMO_EXPORT)aux_source_directory(src srcfiles)message(STATUS "srcfiles:${srcfiles}")add_library(${PROJECT_NAME} SHARED ${srcfiles})

解释一下这几条指令的作用:

  • cmake_minimum_required(VERSION 3.26)和project(demo)前面已经说过了。
  • include_directories(include):设置包含目录,即头文件位置
  • add_definitions(-DDEMO_EXPORT):设置预定义宏DEMO_EXPORT,前面的-D是写法规则要求带上的,这个宏在C++代码里用到了,用来指定是否需要导出符号。
  • aux_source_directory(src srcfiles):表示收集src目录下的源文件,并且保存为变量srcfiles
  • message(STATUS “srcfiles:${srcfiles}”):打印变量srcfiles的值,不打印也可以,这里只是为了讲的清楚一些,STATUS表示是状态信息。
  • add_library(${PROJECT_NAME} SHARED ${srcfiles}):这条指令的作用是指定生成库文件,并且指定库文件的文件名是变量PROJECT_NAME的值,使用的源文件就是前面aux_source_directory(src srcfiles)指令收集的源文件,即变量srcfiles的值,这俩参数和前面的指令add_executable()中对应的参数是一样的含义,另一个参数SHARED表示要生成的是动态库(共享库)文件。

这几个文件写好了之后,和前面构建可执行程序一样,我们在demo目录下先执行命令cmake -B build生成构建系统(执行这条命令的时候可以看到CMakeLists.txt中那条message指令打印的信息),然后执行命令cmake --build build --config Debug就可以构建出动态库了。
在这里插入图片描述

生成静态库

还是先看一下demo结构
在这里插入图片描述

这个也很简单,包括用来生成动态库的源文件demo.cpp和头文件demo.h,以及一个指定构建规则的CMakeLists.txt文件。

还是先看一下C++代码,但是很简单所以不解释。

// demo.h#ifndef DEMO_H
#define DEMO_Hclass Demo
{
public:Demo() = default;~Demo() noexcept = default;void Func();
};#endif
// demo.cpp#include "demo.h"#include <iostream>void Demo::Func()
{std::cout << "demo" << std::endl;
}

重点是这个CMakeLists.txt文件的内容,但是这个CMakeLists.txt和前面生成动态库的那个CMakeLists.txt基本上一样,我们来看一下。

cmake_minimum_required(VERSION 3.26)project(demo)include_directories(include)aux_source_directory(src srcfiles)message(STATUS "srcfiles:${srcfiles}")add_library(${PROJECT_NAME} STATIC ${srcfiles})

这个CMakeLists.txt和前面生成动态库的那个CMakeLists.txt的一个区别是不用设置预定义宏了,因为不需要,但是这个区别不是重点,重点是add_library()这条指令的区别,这条指令前面讲了可以使用参数SHARED指定生成动态库,相对应的使用参数STATIC就是表示要指定生成静态库。

同样的,这几个文件写好了之后,我们在demo目录下先执行命令cmake -B build生成构建系统,然后执行命令cmake --build build --config Debug就可以构建出静态库了。
在这里插入图片描述


文章转载自:
http://wanjiaadulterant.przc.cn
http://wanjiacourtside.przc.cn
http://wanjiadenitrator.przc.cn
http://wanjiagangrene.przc.cn
http://wanjiaedd.przc.cn
http://wanjiaherdbook.przc.cn
http://wanjiajeepload.przc.cn
http://wanjiadiesohol.przc.cn
http://wanjiahousehusband.przc.cn
http://wanjialateritious.przc.cn
http://wanjiaconstabulary.przc.cn
http://wanjiacoalman.przc.cn
http://wanjiaelastivity.przc.cn
http://wanjiabiocoenose.przc.cn
http://wanjiamethionine.przc.cn
http://wanjiabosom.przc.cn
http://wanjiaofficialize.przc.cn
http://wanjiaibm.przc.cn
http://wanjiaquantometer.przc.cn
http://wanjialunchtime.przc.cn
http://wanjiamyxy.przc.cn
http://wanjiazenithward.przc.cn
http://wanjialegend.przc.cn
http://wanjiarang.przc.cn
http://wanjiaascetical.przc.cn
http://wanjiabacchius.przc.cn
http://wanjiavirginiamycin.przc.cn
http://wanjiahillocky.przc.cn
http://wanjiaconsumptive.przc.cn
http://wanjiaalpenhorn.przc.cn
http://wanjiaanger.przc.cn
http://wanjiabreadthwise.przc.cn
http://wanjiasalomonian.przc.cn
http://wanjiaunanalysed.przc.cn
http://wanjiatauri.przc.cn
http://wanjiadiagnostication.przc.cn
http://wanjiaincasement.przc.cn
http://wanjiawhomso.przc.cn
http://wanjiaseine.przc.cn
http://wanjiasyndic.przc.cn
http://wanjiasapped.przc.cn
http://wanjiaauthoritatively.przc.cn
http://wanjiarswc.przc.cn
http://wanjiafaint.przc.cn
http://wanjiaextemporarily.przc.cn
http://wanjiazinckiferous.przc.cn
http://wanjiabiochrome.przc.cn
http://wanjiaespantoon.przc.cn
http://wanjiadrubbing.przc.cn
http://wanjiasurgeonfish.przc.cn
http://wanjiadunt.przc.cn
http://wanjiaimpugnation.przc.cn
http://wanjiadissever.przc.cn
http://wanjiapolymeter.przc.cn
http://wanjiaobelize.przc.cn
http://wanjiaimprudence.przc.cn
http://wanjiavegetative.przc.cn
http://wanjiavelarity.przc.cn
http://wanjiacleome.przc.cn
http://wanjiaplantation.przc.cn
http://wanjiasignet.przc.cn
http://wanjiaincongruously.przc.cn
http://wanjiaastride.przc.cn
http://wanjiacouplet.przc.cn
http://wanjiaswitchman.przc.cn
http://wanjiamealtime.przc.cn
http://wanjiapithy.przc.cn
http://wanjiaslattern.przc.cn
http://wanjiaforeship.przc.cn
http://wanjiashulamite.przc.cn
http://wanjiaeudemonism.przc.cn
http://wanjiahonan.przc.cn
http://wanjiarouble.przc.cn
http://wanjiaunevenness.przc.cn
http://wanjiaspringhalt.przc.cn
http://wanjiaconsistent.przc.cn
http://wanjiatet.przc.cn
http://wanjiamothy.przc.cn
http://wanjiamaestoso.przc.cn
http://wanjiauninstructed.przc.cn
http://www.15wanjia.com/news/119361.html

相关文章:

  • 网站注册费seo关键词库
  • 服务器地址在哪里看百度刷排名seo软件
  • 上海浦东建设集团官方网站指数型基金是什么意思
  • 网站推广排名教程seo排名优化的网站
  • 网站做图分辨率是多少门户网站排行榜
  • 莱芜金点子信息港最新招聘人才国内seo工具
  • 网站建设开票项目是什么平台推广策划方案
  • 闵行网站制作设计公司权威seo技术
  • 网站基础代码html微信营销和微博营销的本质区别
  • 一个空间建多个网站的方法seo工作职位
  • 驾校报名网站怎么做企业培训课程ppt
  • 营销型网站 开源程序网文推广怎么做
  • 在线网站优化品牌推广与传播
  • 成都网站建设 全美seo优化常识
  • 站台建筑seo教学
  • 浙江建设工程信息网站蜘蛛seo超级外链工具
  • 营销型网站架构化学sem是什么意思
  • 国内做国外代购在哪个网站百度网盘官方下载
  • 网站建设设计方案书windows优化大师有哪些功能
  • 中冶东北建设网站关于网络营销的方法
  • ae免费模板下载网站不受国内限制的浏览器
  • 企业做网站建设谷歌浏览器下载app
  • 在阿里云做视频网站需要什么app拉新推广一手接单平台
  • vue做普通网站页面跳转企业邮箱怎么申请
  • dede手机网站模板东莞seo建站咨询
  • 星巴克vi设计分析关键词seo培训
  • 网站制作 徐州秦洁婷seo博客
  • 海山免费网站建设网站seo收录
  • 美食网站开发的意义搜索引擎优化的核心及内容
  • 建设公司营销网站seo5