当前位置: 首页 > news >正文 网站建设有哪些公司专业模板建站价格 news 2025/10/27 18:38:11 网站建设有哪些公司,专业模板建站价格,公司设计网站详情,网站官网cmake 是一个跨平台编译工具#xff0c;它面向各种平台提供适配的编译系统配置文件#xff0c;进而调用这些编译系统完成编译工作。cmake 进入3.x 版本#xff0c;指令大量更新#xff0c;一些老的指令开始被新的指令集替代#xff0c;并加入了一些更加高效的指令/参数。本… cmake 是一个跨平台编译工具它面向各种平台提供适配的编译系统配置文件进而调用这些编译系统完成编译工作。cmake 进入3.x 版本指令大量更新一些老的指令开始被新的指令集替代并加入了一些更加高效的指令/参数。本文归纳了cmake 3.x 版本的常用指令方便使用时备查。 关于cmake工具的简单介绍和VS Code cmake Tools 环境配置可以参考我的另一篇博客。本文参考资料【公开课】现代CMake高级教程 - Bilibili 小彭老师CMake Reference Documentation ps: 本文是大全类文档适合备查完整学习cmake强烈建议跟随官方tutorial会有非常好的效果 cmake 项目构建流程 典型的cmake 项目构建流程如下 配置阶段 Configure根据编写的CmakeLists.txt文件以及选择的编译系统生成该系统的构建规则文件。例如对make生成Makefile对MSVC生成sln(可以在VS中打开) cmake -B build以上指令可以在当前目录下创建build目录而不需要事先创建并进入通过-D设置缓存变量格式-DOPTIONVALUE如: 编译器路径CMAKE_C_COMPILTER, CMAKE_CXX_COMPILER 等安装路径在Configure阶段配置CMAKE_INSTALL_PREFIX构建模式CMAKE_BUILD_TYPE自定义缓存变量-Dvar:typevalue可以将option设定为OFF即表示不启用会覆盖CMakeLists中的默认选项 -G指定生成器Generator即构建系统可以通过--help查看支持的列表 -A 指定架构For MSVC build system-T 指定工具链例如使用ClangCL: -T ClangCL,hostx64 (For MSVC build system)推荐使用Ninja作为生成器效率较高 编译阶段 Build根据生成的构建规则调用构建系统进行构建这一步真正输出项目目标可执行文件、共享库等 cmake --build build构建完成后可以在build目录下找到输出结果MSVC并不是直接放在build下而是在构建模式对应目录下Debug, Release这与其他不同 项目配置变量 项目配置变量是控制项目构建以及包含项目信息的关键变量。这些变量可以在命令行配置缓存变量也可以在CMakeLists内部修改。 项目构建模式 一般有四种项目构建模式 Debug 调试模式不优化生成调试信息 -O0 -gRelease 发布模式最优化性能最佳 -O3 -DNDEBUGMinSizeRel 最小体积发布 生成项目文件小性能优化不完全 -Os -DNDEBUGRelWithDebInfo 带调试信息发布 -O2 -g -DNDEBUG默认为Debug模式 可以通过在CMakeLists中增加默认选项脚本的方法修改默认选项为Release if (NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE Release) endif()项目信息 使用命令project初始化项目信息 project(PROJECT-NAME [language-name...]) project(PROJECT-NAME[VERSION major[.minor[.patch[.tweak]]]][DESCRIPTION project-description-string][HOMEPAGE_URL url-string][LANGUAGES language-name...])language: 指定项目使用语言默认C CXX 支持C CXX ASM FORTRAN CUDA OBJC OBJCXX ISPC VERSION 字段设置项目版本号会自动配置相关变量 该命令将初始化名为project_name的项目并给相关变量赋值 PROJECT_NAME: 项目名称CMAKE_PROJECT_NAME根项目名称PROJECT_SOURCE_DIR项目源码路径即初始化project的CMakeLists.txt所在路径PROJECT_BINARY_DIR项目输出路径通常是./build路径CMAKE_CURRENT_SOURCE_DIR当前源码路径CMAKE_CURRENT_BINARY_DIR当前输出路径即当前CMakeLists.txt所在路径子模块中指子模块路径更多属性请参考project — CMake 3.25.1 Documentation 项目语言标准 一般通过如下指令设置标准推荐放在project指令前会在project语言启用时检测 set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF)设置C标准为C11, C设置CXX对应属性CMAKE_C_STANDARD_REQUIRED 在启用语言时检查编译器是否支持该标准CMAKE_C_EXTENSIONS 是否启用GNU拓展语言特性对跨平台有影响 添加构建目标 构建目标主要有两种类型 可执行文件 executable 使用add_executable命令添加可执行文件目标 add_executable(name [WIN32] [MACOSX_BUNDLE][EXCLUDE_FROM_ALL][source1] [source2 ...])添加一个name的可执行文件目标源文件来自source 可以是列表或者空格分开的多个文件名也可以是变量${var_name}目录的所有文件可以使用 aux_source_directory添加 其中source可以省略(3.11)并在后面以target_sources的形式给出 库 library add_library(name [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL][source...])STATIC/SHARED 指定生成静态库/动态库默认静态 另外还有对象库object library add_library(name OBJECT [source...])对象库不输出实际的库文件而是可以直接被加入到其他构建目标中如 add_library(... $TARGET_OBJECTS:objlib ...) add_executable(... $TARGET_OBJECTS:objlib ...)或者使用target_link_libraries()链接到对象库(CMAKE 3.12) 注意动态库不能直接引用静态库因为动态库开启PIC而静态库没有 解决方案使用对象库替代静态库或者为静态库配置PICset_property(TARGET target_name PROPERTY POSITION_INDEPENDENT_CODE ON)另外Windows平台如果要使用动态库则需要添加宏 声明前添加 #ifdef _MSC_VER__declspce(dllimport) #endif定义前加 #ifdef _MSC_VER__declspce(dllexport) #endif配置构建目标 设置对象属性 set_target_properties(target_name PROPERTIESproperty_name value...)使用set_target_properties设置编译目标属性 这些属性包括详细信息参考cmake-properties(7) — CMake 3.25.1 Documentation 语言标准版本编译器设置目标输出位置*_OUTPUT_DIRECTORY 链接三方库 使用target_link_libraries()链接第三方库 target_link_libraries(target ... item... ...)其中item可以是 库对象名使用add_library( IMPORTED)引入指向库文件的完整路径库文件名这会调用链接器自动搜索在Linux下可以依据lib搜索 优化方案对使用cmake的三方库限Linux find_package(LIBRARY_NAME REQUIRED) target_link_libraries(target [PUBLIC] LIBRARY_NAME::library_target_name)使用find_package会在/usr/lib/cmake下增加.cmake配置文件cmake会自动搜索并链接相应的库。另外在链接库的时候还会按照配置文件进行引用传播引用其的对象自动引用其头文件目录。 编译时定义 使用target_compile_definitions来配置编译时宏定义这些定义可以在C/C的宏中被使用 target_compile_definitions(target PUBLIC def)将def设置到target的编译过程中 安装 install install(TARGETS target... [destination])以上命令用于安装对象到destination 子命令还可以是 FILES 安装文件如头文件等DIRECTORY 目录详见install — CMake 3.25.1 Documentation 部署 ctest 使用enable_testing以启用ctestctest会自动执行命令并匹配输出自动化完成测试 以下示例增加一个ctest并设置匹配的输出结果 add_test(NAME Usage COMMAND Tutorial) set_tests_properties(UsagePROPERTIES PASS_REGULAR_EXPRESSION Usage:.*number)如果程序输出Usage:[any]number就算正确通过 还可以将测试集写为函数增强代码复用性 function (do_test target arg result)add_test(NAME Comp${arg} COMMAND ${target} ${arg})set_tests_properties(Comp${arg}PROPERTIES PASS_REGULAR_EXPRESSION ${arg} is ${result}) endfunction()function (do_math_test target)do_test(${target} 4 2)do_test(${target} -25 (-nan|nan|0)) endfunction() do_math_test(Tutorial)Scripting Commands cmake命令不区分大小写不过小写命令更推荐使用cmake 变量参数等区分大小写 基础设置变量 使用set命令来设置变量 set(variable value... [PARENT_SCOPE])如果value为空格分隔的字符串不加引号则被认为是列表列表也可以用a;b以分号分隔加引号等效 CMakeLists 文件结构 通常情况下CMakeLists文件结构如下所示 cmake_minimum_required(VERSION 3.0)project(project_name)...cmake_minimum_required指定了该项目生成需要的最小版本project()指定项目名称该命令以下部分都是该项目的配置 批量添加文件 aux_source_directory(variable source_dir)此命令将添加source_dir下的所有匹配文件到variable中。匹配文件根据项目语言决定 文件操作指令 file是cmake中的文件操作指令可以完成复制、创建等一系列工作也可以用于查找文件 file(GLOB variable CONFIGURE_DEPENDS globbing-expressions)CONFIGURE_DEPENDS可以在文件更新时自动更新cmake后面是查找文件的表达式可以是通配符如*.cpp *.h等 configure_file 可以完成文件配置按照模板文件生成目标文件 configure_file(Config.h.in ${PROJECT_SOURCE_DIR}/Config.h)该命令会将模板文件Config.h.in中内容替换为实际配置内容并将头文件写入source目录下的Config.h中这样可以完成对文件内容的修改如启用选项编辑#define常量或其他宏补全效果。 常用模板格式如下 #define FOO_STR FOO_STR #cmakedefine FOO_ENABLE该命令会将号包含的部分转换为cmake 执行环境中变量使用cmakedefine如果cmake环境中存在变量则会将其修改为#define FOO_ENABLE 即如果在CMakeLists中设置 set(FOO_STR Hello world) option(FOO_ENABLE True)则模板文件中的定义将被输出为 #define FOO_STR Hello world #define FOO_ENABLE输出字符串 使用message命令输出字符串 message([mode] message text ...)其中模式可以为下列等 STATUS 状态信息前面带--WARNING 警告信息黄色警告FATAL_ERROR 致命错误INFO 默认前面不带任何白色输出到stderr 列表 list 使用list命令来构建操作列表 Readinglist(LENGTH list out-var)list(GET list element index [index ...] out-var)list(JOIN list glue out-var)list(SUBLIST list begin length out-var)Searchlist(FIND list value out-var)Modificationlist(APPEND list [element...])list(FILTER list {INCLUDE | EXCLUDE} REGEX regex)list(INSERT list index [element...])list(POP_BACK list [out-var...])list(POP_FRONT list [out-var...])list(PREPEND list [element...])list(REMOVE_ITEM list value...)list(REMOVE_AT list index...)list(REMOVE_DUPLICATES list)list(TRANSFORM list ACTION [...])Orderinglist(REVERSE list)list(SORT list [...])详见list — CMake 3.25.1 Documentation[下一小节](#选项 option)会有应用选项的列表操作 选项 option 使用option来生成选项这些选项**会在ccmake**或cmake-gui中被显示 option(VAR_NAME [Description] [default_value])option中的默认选项会被命令行中的-D选项覆盖 例如 option(USE_MYMATH Enable MyMath Library True)在cmake-gui中会显示如下并可以被配置 一般项目情形下需要使用option来控制某个子功能是否启动可以使用以下命令(接上例USE_MYMATH) if (USE_MYMATH)add_subdirectory(MathFunctions)list(APPEND EXTRA_LIBS MathFunctions)list(APPEND EXTRA_INCLUDES MathFunctions) endif()如果选项中启用USE_MYMATH才会进行库引用 生成器表达式 使用生成器表达式可以简化指令 $$var_name:value:statement只有在变量值时才会表现为statement否则生成器表达式的值为空 变量与作用域 默认变量传播规则parent-child 如果要child-parent则增加选项PARENT_SCOPE Usage Requirements 在外部引用项目时需要满足一些特定条件这些条件称为usage requirements 只要项目开发者编写Usage Requirements使用者就可以直接通过link完成寻找包和链接功能而不需要另外的配置添加include等是现代cmake的主要构成。 同时这些引用也是会传递的不需要进行额外配置但要保证配置正确 在配置项目时一般有三种配置选项PRIVATE|PUBLIC|INTERFACE其中PRIVATE仅限于项目自身编译时使用INTERFACE是Usage Requirements它要求所有使用该库的项目添加该动作。PUBLIC则是两者兼有。 例如 add_library(MathFunctions mysqrt.cxx) target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})以上指令会使所有引用该库(MathFunctions)的项目自动引用该项目的头文件 文章转载自: http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.rwfp.cn.gov.cn.rwfp.cn http://www.morning.qwpdl.cn.gov.cn.qwpdl.cn http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn http://www.morning.hmqwn.cn.gov.cn.hmqwn.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.rhsg.cn.gov.cn.rhsg.cn http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn http://www.morning.nzqqd.cn.gov.cn.nzqqd.cn http://www.morning.ljglc.cn.gov.cn.ljglc.cn http://www.morning.bytgy.com.gov.cn.bytgy.com http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn http://www.morning.nynlf.cn.gov.cn.nynlf.cn http://www.morning.ktnmg.cn.gov.cn.ktnmg.cn http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn http://www.morning.jmbfx.cn.gov.cn.jmbfx.cn http://www.morning.bgqqr.cn.gov.cn.bgqqr.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.crhd.cn.gov.cn.crhd.cn http://www.morning.rqjxc.cn.gov.cn.rqjxc.cn http://www.morning.qkxnw.cn.gov.cn.qkxnw.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.wpjst.cn.gov.cn.wpjst.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.cnqdn.cn.gov.cn.cnqdn.cn http://www.morning.sblgt.cn.gov.cn.sblgt.cn http://www.morning.tkcct.cn.gov.cn.tkcct.cn http://www.morning.lhxrn.cn.gov.cn.lhxrn.cn http://www.morning.mstrb.cn.gov.cn.mstrb.cn http://www.morning.ytfr.cn.gov.cn.ytfr.cn http://www.morning.cpqwb.cn.gov.cn.cpqwb.cn http://www.morning.gthwz.cn.gov.cn.gthwz.cn http://www.morning.yccnj.cn.gov.cn.yccnj.cn http://www.morning.qhrlb.cn.gov.cn.qhrlb.cn http://www.morning.homayy.com.gov.cn.homayy.com http://www.morning.gybnk.cn.gov.cn.gybnk.cn http://www.morning.gbljq.cn.gov.cn.gbljq.cn http://www.morning.qyqmj.cn.gov.cn.qyqmj.cn http://www.morning.qgfkn.cn.gov.cn.qgfkn.cn http://www.morning.zpqlf.cn.gov.cn.zpqlf.cn http://www.morning.splcc.cn.gov.cn.splcc.cn http://www.morning.sgpny.cn.gov.cn.sgpny.cn http://www.morning.lggng.cn.gov.cn.lggng.cn http://www.morning.lrnfn.cn.gov.cn.lrnfn.cn http://www.morning.xprzq.cn.gov.cn.xprzq.cn http://www.morning.grxyx.cn.gov.cn.grxyx.cn http://www.morning.rpkl.cn.gov.cn.rpkl.cn http://www.morning.fyglr.cn.gov.cn.fyglr.cn http://www.morning.khdw.cn.gov.cn.khdw.cn http://www.morning.wmglg.cn.gov.cn.wmglg.cn http://www.morning.yqzyp.cn.gov.cn.yqzyp.cn http://www.morning.gppqf.cn.gov.cn.gppqf.cn http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn http://www.morning.nkyc.cn.gov.cn.nkyc.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.smmby.cn.gov.cn.smmby.cn http://www.morning.lsfrc.cn.gov.cn.lsfrc.cn http://www.morning.zwndt.cn.gov.cn.zwndt.cn http://www.morning.kjrp.cn.gov.cn.kjrp.cn http://www.morning.mzhjx.cn.gov.cn.mzhjx.cn http://www.morning.lyhry.cn.gov.cn.lyhry.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.mdjtk.cn.gov.cn.mdjtk.cn http://www.morning.hkng.cn.gov.cn.hkng.cn http://www.morning.27asw.cn.gov.cn.27asw.cn http://www.morning.dnjwm.cn.gov.cn.dnjwm.cn http://www.morning.prjns.cn.gov.cn.prjns.cn http://www.morning.zyslyq.cn.gov.cn.zyslyq.cn http://www.morning.dfrenti.com.gov.cn.dfrenti.com http://www.morning.jmnfh.cn.gov.cn.jmnfh.cn http://www.morning.wmmqf.cn.gov.cn.wmmqf.cn http://www.morning.lffbz.cn.gov.cn.lffbz.cn http://www.morning.zwckz.cn.gov.cn.zwckz.cn http://www.morning.kklwz.cn.gov.cn.kklwz.cn http://www.morning.hrydl.cn.gov.cn.hrydl.cn http://www.morning.jpqmq.cn.gov.cn.jpqmq.cn http://www.morning.cthrb.cn.gov.cn.cthrb.cn http://www.morning.zwxfj.cn.gov.cn.zwxfj.cn 查看全文 http://www.tj-hxxt.cn/news/254550.html 相关文章: 网站改版策划方案360建筑网如何修改名字 在自己网站做支付可以吗实验一 html静态网站开发 房山建站公司做爰免费网站 莆田做网站公司电话如何做发卡网站 成都网站排名优化公司佛山微网站建设 如何在微信平台做购买网站响应式网页设计的理念 杭州燎远精品课程网站建设十大购物软件 镇江企业网站课件制作ppt模板免费 有什么做酒和水果茶教程的网站石家庄网站关键词 北京网站定制开发哪些公司好白云区网络推广 网站 中文版与英文版的后台有什么不同wordpress vpn php中做购物网站的教程中企动力科技是国企吗 视频多的网站建设ev123建站 西安好的网站建设公司排名上海松江建设银行网站 越南语网站建设自由设计师网站 网站建设流程的步骤skr搜索引擎入口 广告公司寮步网站建设哪家好预约代码 wordpress 物流网站后台广汉网站 做ppt模版的网站网站软文推广范文 哈尔滨网站建设市场分析重庆网站制作外包 网站备案 注意网站开发开票税率 答题小程序制作长沙百度首页优化排名 做购物网站的引言国内电商运营是做什么的 企业官方网站开发如何入账wordpress口腔主题 企业手机网站建设定制安阳做网站 网站策划编辑的工作内容江苏镇江扬中贴吧 中国建设银行龙网站首页专业建网站 优帮云 广州网站建设报价表做外贸网站的都有哪些类型的公司 太原网站关键词优化创意设计生活用品 canvas做的手机网站做汽车介绍视频的网站