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

重庆定制网站开发价格龙岗区网络科技有限公司

重庆定制网站开发价格,龙岗区网络科技有限公司,服务器网站开发,廊坊网站建设电话准备 windows下设置文件的版本需要通过VERSIONINFO接口#xff0c;详情参考VERSIONINFO resource。这里我们根据模板做了一定的修改。 1 VERSIONINFOFILEVERSION ${GIT_VERSION} //文件版本号#xff0c;必填。以,分隔#xff0c;输出以.分隔。这里是取CMakeLists里的GIT_…准备 windows下设置文件的版本需要通过VERSIONINFO接口详情参考VERSIONINFO resource。这里我们根据模板做了一定的修改。 1 VERSIONINFOFILEVERSION ${GIT_VERSION} //文件版本号必填。以,分隔输出以.分隔。这里是取CMakeLists里的GIT_VERSION变量PRODUCTVERSION ${GIT_VERSION} //产品版本号必填。以,分隔。虽然没起作用见下面的ProductVersionFILEFLAGSMASK 0x17L #ifdef _DEBUGFILEFLAGS 0x1L #elseFILEFLAGS 0x0L #endifFILEOS 0x4LFILETYPE 0x0LFILESUBTYPE 0x0L BEGINBLOCK StringFileInfoBEGINBLOCK 040904b0BEGINVALUE FileDescription, MyLibrary Binary //文件说明VALUE FileVersion, 1.1.1 //文件版本好像没啥用只与FILEVERSION相关VALUE InternalName, //VALUE LegalCopyright, Copyright (C) 2019VALUE OriginalFilename, VALUE ProductName, 1234 //产品名称VALUE ProductVersion, 1.3.4.5.6 //产品版本与PRODUCTVERSION无关,直接输出 //${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH},${PROJECT_VERSION_TWEAK}ENDENDBLOCK VarFileInfoBEGINVALUE Translation, 0x409, 1200END END 注意事项 FILEVERSION和PRODUCTVERSION为必填项。内容以,分隔输出以.分隔(如设置为1,1,3,5则实际输出版本为1.1.3.5)。可以直接是一整个变量也可以是多个变量以,隔开。而后面BLOCK块中内容都是全量输出不做调整。目前实验显示FILEVERSION内容管理实际输出的文件版本号而产品版本号不由PRODUCTVERSION管理反而由后面BLOK块中的ProductVersion控制。不知道是为啥。 调用versioninfo 前面已经准备号了versioninfo.接下来需要在CMakeLists中接入versioninfo。 首先将上面的versioninfo模板内容写入到文件中并命名为versioninfo.rc(名字不重要只要后续引用这个文件即可)先在CMakeLists中手动写一个版本号(动态获取后面介绍),GIT_VERSION与versioninfo.rc中引用的变量名保持一致 set(GIT_VERSION 1,2,0,4) 通过config_file()命令将文件拷贝到指定文件或目录下。这里使用的时MSVC编译器所以对MSVC进行判断了。 if(MSVC)set(VERSIONINFO_RC ${CMAKE_BINARY_DIR}/versioninfo.rc)configure_file(${CMAKE_SOURCE_DIR}/versioninfo.rc${VERSIONINFO_RC}) endif() 创建输出文件(dll/exe)时包含versioninfo.rc资源 add_executable(${PROJECT_NAME} ${SOURCES} ${VERSIONINFO_RC}) cmake之后编译查看生成的可执行文件详细信息内容。 动态获取版本号 这里采用的是cmake的execute_process运行git命令获取版本并对结果进行截取组合达到我们想要的内容。 execute_process表示运行命令可以与git其他命令结合获取其他信息。 ####################### ####获取git版本######### ####################### #设置默认版本 set(GIT_VERSION 1.0.0) #通过git命令获取版本 execute_process(COMMAND git describe --tags OUTPUT_VARIABLE GIT_DESCRIBE)# set(GIT_DESCRIBE ${GIT_DESCRIBE}-8-) #查找版本 string(REGEX MATCH [0-9]\\.[0-9]\\.[0-9] GIT_DESCRIBE_VERSION ${GIT_DESCRIBE}) message(STATUS GIT_DESCRIBE_VERSION${GIT_DESCRIBE_VERSION}) if(NOT ${GIT_DESCRIBE_VERSION} EQUAL ) set(GIT_VERSION ${GIT_DESCRIBE_VERSION}) endif()#查找提交次数 string(REGEX MATCHALL -([0-9])- MATCH_COMMIT_RET ${GIT_DESCRIBE}) message(STATUS MATCH_COMMIT_RET${MATCH_COMMIT_RET}) list(LENGTH MATCH_COMMIT_RET MATCH_COMMIT_RET_LEN)message(STATUS MATCH_COMMIT_RET_LEN${MATCH_COMMIT_RET_LEN})if(${MATCH_COMMIT_RET_LEN} GREATER 0) #拿到最后一个匹配项 math(EXPR MATCH_COMMIT_RET_LEN ${MATCH_COMMIT_RET_LEN} - 1) message(STATUS MATCH_COMMIT_RET_LEN${MATCH_COMMIT_RET_LEN}) list(GET MATCH_COMMIT_RET ${MATCH_COMMIT_RET_LEN} MATCH_LAST) #获取 string(REGEX REPLACE -(.)- \\1 GIT_COMMIT_COUNT ${MATCH_LAST}) set(GIT_VERSION ${GIT_VERSION}.${GIT_COMMIT_COUNT}) else()#没有则默认写0 set(GIT_VERSION ${GIT_VERSION}.0) endif()string(REPLACE . , GIT_VERSION ${GIT_VERSION}) # set(GIT_VERSION 1,2,0) # message(STATUS final version is ${GIT_VERSION}) ##################################END####################################### 缺陷 这里因为是按照我们设想的git tag版本格式(x.x.x)并根据git describe会自动返回version-提交次数-g当前提交hash内容所写的。目的就是提炼成version.提交次数也就是x.x.x.x形式。所以这就要求在打tag的时候需要注意一定的格式否则这个代码将不起作用。 此外git describe对于轻量标签不起作用只有附注标签生效。 完整代码 cmake_minimum_required(VERSION 3.10)project(gitversion)####################### ####获取git版本######### ####################### #设置默认版本 set(GIT_VERSION 1.0.0) #通过git命令获取版本 execute_process(COMMAND git describe --tagsOUTPUT_VARIABLE GIT_DESCRIBE)# set(GIT_DESCRIBE ${GIT_DESCRIBE}-8-) #查找版本 string(REGEX MATCH [0-9]\\.[0-9]\\.[0-9] GIT_DESCRIBE_VERSION ${GIT_DESCRIBE}) message(STATUS GIT_DESCRIBE_VERSION${GIT_DESCRIBE_VERSION}) if(NOT ${GIT_DESCRIBE_VERSION} EQUAL )set(GIT_VERSION ${GIT_DESCRIBE_VERSION}) endif()#查找提交次数 string(REGEX MATCHALL -([0-9])- MATCH_COMMIT_RET ${GIT_DESCRIBE}) message(STATUS MATCH_COMMIT_RET${MATCH_COMMIT_RET}) list(LENGTH MATCH_COMMIT_RET MATCH_COMMIT_RET_LEN)message(STATUS MATCH_COMMIT_RET_LEN${MATCH_COMMIT_RET_LEN})if(${MATCH_COMMIT_RET_LEN} GREATER 0)#拿到最后一个匹配项math(EXPR MATCH_COMMIT_RET_LEN ${MATCH_COMMIT_RET_LEN} - 1)message(STATUS MATCH_COMMIT_RET_LEN${MATCH_COMMIT_RET_LEN})list(GET MATCH_COMMIT_RET ${MATCH_COMMIT_RET_LEN} MATCH_LAST)#获取string(REGEX REPLACE -(.)- \\1 GIT_COMMIT_COUNT ${MATCH_LAST})set(GIT_VERSION ${GIT_VERSION}.${GIT_COMMIT_COUNT}) else()#没有则默认写0set(GIT_VERSION ${GIT_VERSION}.0) endif()string(REPLACE . , GIT_VERSION ${GIT_VERSION}) # set(GIT_VERSION 1,2,0) # message(STATUS final version is ${GIT_VERSION}) ##################################END########################################这里需要注意按顺序 if(MSVC)set(VERSIONINFO_RC ${CMAKE_BINARY_DIR}/versioninfo.rc)configure_file(${CMAKE_SOURCE_DIR}/versioninfo.rc${VERSIONINFO_RC}) endif()file(GLOB SOURCES *.cpp) add_executable(${PROJECT_NAME} ${SOURCES} ${VERSIONINFO_RC})target_include_directories(${PROJECT_NAME} PRIVATE${CMAKE_SOURCE_DIR}) 注意事项 需要注意这里add_executable中引用了versioninfo.rc文件而versioninfo.rc文件中引用了GIT_VERSION变量所以GIT_VERSION变量的获取需要放在最前面然后是引入versioninfo.rc最后是add_executable否则会导致编译时GIT_VERSION变量内容为空编译不过。 其他 另一种方式是通过cmake的PROJECT_VERSION,PROJECT_VERSION_MAJOR, PROJECT_VERSION_MINOR, PROJECT_VERSION_PATCH, PROJECT_VERSION_TWEAK来获取,但是无法动态调整版本号需要手动修改。 代码如下 cmake_minimum_required(VERSION 3.10)project(cmakeversion VERSION 1.2.5.8)#这里需要注意按顺序 if(MSVC)set(VERSIONINFO_RC ${CMAKE_BINARY_DIR}/versioninfo.rc)configure_file(${CMAKE_SOURCE_DIR}/versioninfo.rc${VERSIONINFO_RC}) endif()file(GLOB SOURCES *.cpp) add_executable(${PROJECT_NAME} ${SOURCES} ${VERSIONINFO_RC})target_include_directories(${PROJECT_NAME} PRIVATE${CMAKE_SOURCE_DIR})include(CMakePackageConfigHelpers) configure_package_config_file(Config.cmake.in${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmakeINSTALL_DESTINATION lib/cmake/${PROJECT_NAME}) write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmakeVERSION ${PACKAGE_VERSION} COMPATIBILITY AnyNewerVersion )install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmakeDESTINATION lib/cmake/${PROJECT_NAME} )message(status version${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}) 此外需要引用Config.cmake.in PACKAGE_INITset_and_check(CMAKEVERSION_INCLUDE_DIR PACKAGE_INCLUDE_INSTALL_DIR) set_and_check(CMAKEVERSION_SYSCONFIG_DIR PACKAGE_SYSCONFIG_INSTALL_DIR)check_required_components(Cmakeversion)
http://www.zqtcl.cn/news/121619/

相关文章:

  • 静安微信手机网站制作中企动力做网站费用
  • 北京网站建设交易凡客诚品特色
  • 免费建设旅游网站学校网站开发方案
  • 专门做网站的科技公司青岛做网站哪家专业
  • 佛山网站优化效果珠海婚恋网站建设市场分析
  • 贵阳建设公司网站个人网站必须备案
  • 万网网站备案域客式单页网站能申请域名吗
  • 网站建设公司哪家好 都来磐石网络建设银行网络平台
  • 微营销网站建设免费建设网站教程
  • c .net怎么做网站如何进行账号推广
  • 网站建设丨金手指谷哥12怎么看网站做的外链
  • 一个空间建多个网站青海培训网站建设公司
  • 网站国际联网备案大型外贸网站建设
  • 淮南 小学网站建设软件技术主要学什么就业前景
  • 微网站建设网站洛阳制作网站公司哪家好
  • 凤翔做网站wordpress分销商城
  • 网站产品网页设计模板企业网站优化关键词
  • 电商网站建设去迅法网网站管理与建设试题
  • 做网站必须知道的问题wordpress制作论坛
  • 怎样在建设部网站查资质证书网页设计有哪些岗位
  • 安徽中色十二冶金建设有限公司网站cad制图初学入门
  • 开发网站监控工具网上开店怎么找货源
  • 标准网站建设报价单私密浏览器直播
  • wordpress焦点图网站seo分析
  • 域名申请哪个网站好江西有色建设集团有限公司网站
  • 新乡市做网站的公司百度推广开户费用多少
  • 免费建网站哪个平台好php 未定义函数wordpress
  • 个人网站 域名选择郑州那家做网站便宜
  • 网站建设技术合伙人的技术股份全国免费发布信息网站大全
  • 兼职网站平台有哪些新手怎么学做网站