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

上海企业咨询公司一键优化表格

上海企业咨询公司,一键优化表格,自己做的网站如何赚钱吗,泉州网站设计公司准备 windows下设置文件的版本需要通过VERSIONINFO接口,详情参考VERSIONINFO resource。这里我们根据模板做了一定的修改。 1 VERSIONINFOFILEVERSION ${GIT_VERSION} //文件版本号,必填。以,分隔,输出以.分隔。这里是取CMakeLists里的GIT_…

准备

windows下设置文件的版本需要通过VERSIONINFO接口,详情参考VERSIONINFO resource。这里我们根据模板做了一定的修改。

1 VERSIONINFOFILEVERSION ${GIT_VERSION}	//文件版本号,必填。以,分隔,输出以.分隔。这里是取CMakeLists里的GIT_VERSION变量PRODUCTVERSION ${GIT_VERSION} //产品版本号,必填。以,分隔。虽然没起作用,见下面的"ProductVersion"FILEFLAGSMASK 0x17L
#ifdef _DEBUGFILEFLAGS 0x1L
#elseFILEFLAGS 0x0L
#endifFILEOS 0x4LFILETYPE 0x0LFILESUBTYPE 0x0L
BEGINBLOCK "StringFileInfo"BEGINBLOCK "040904b0"BEGINVALUE "FileDescription", "MyLibrary Binary" //文件说明VALUE "FileVersion", "1.1.1"                //文件版本,好像没啥用,只与FILEVERSION相关VALUE "InternalName", ""           //VALUE "LegalCopyright", "Copyright (C) 2019"VALUE "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 "VarFileInfo"BEGINVALUE "Translation", 0x409, 1200END
END

注意事项

  1. FILEVERSION和PRODUCTVERSION为必填项。内容以','分隔,输出以'.'分隔(如设置为1,1,3,5,则实际输出版本为1.1.3.5)。可以直接是一整个变量,也可以是多个变量以','隔开。
  2. 而后面BLOCK块中内容都是全量输出,不做调整。
  3. 目前实验显示FILEVERSION内容管理实际输出的文件版本号,而产品版本号不由PRODUCTVERSION管理,反而由后面BLOK块中的"ProductVersion"控制。不知道是为啥。

调用versioninfo

前面已经准备号了versioninfo.接下来需要在CMakeLists中接入versioninfo。

  1. 首先将上面的versioninfo模板内容写入到文件中,并命名为versioninfo.rc(名字不重要,只要后续引用这个文件即可)
  2. 先在CMakeLists中手动写一个版本号(动态获取后面介绍),GIT_VERSION与versioninfo.rc中引用的变量名保持一致
set(GIT_VERSION 1,2,0,4)
  1. 通过config_file()命令将文件拷贝到指定文件或目录下。这里使用的时MSVC编译器,所以对MSVC进行判断了。
if(MSVC)set(VERSIONINFO_RC "${CMAKE_BINARY_DIR}/versioninfo.rc")configure_file("${CMAKE_SOURCE_DIR}/versioninfo.rc""${VERSIONINFO_RC}")
endif()
  1. 创建输出文件(dll/exe)时包含versioninfo.rc资源
add_executable(${PROJECT_NAME} ${SOURCES} ${VERSIONINFO_RC})
  1. 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_INIT@set_and_check(CMAKEVERSION_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
set_and_check(CMAKEVERSION_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")check_required_components(Cmakeversion)

文章转载自:
http://needlefish.rmyn.cn
http://shipowner.rmyn.cn
http://me.rmyn.cn
http://abutting.rmyn.cn
http://tangly.rmyn.cn
http://acronical.rmyn.cn
http://overbowed.rmyn.cn
http://psychosurgery.rmyn.cn
http://chinese.rmyn.cn
http://encephala.rmyn.cn
http://sesotho.rmyn.cn
http://dismayful.rmyn.cn
http://confiscatory.rmyn.cn
http://biliary.rmyn.cn
http://overrefine.rmyn.cn
http://zapotecan.rmyn.cn
http://favor.rmyn.cn
http://blotter.rmyn.cn
http://embog.rmyn.cn
http://cortin.rmyn.cn
http://sociologese.rmyn.cn
http://budless.rmyn.cn
http://dissolve.rmyn.cn
http://underservant.rmyn.cn
http://crassly.rmyn.cn
http://bmr.rmyn.cn
http://definitive.rmyn.cn
http://nonorgasmic.rmyn.cn
http://funnel.rmyn.cn
http://orrin.rmyn.cn
http://zoophoric.rmyn.cn
http://antagonize.rmyn.cn
http://yearling.rmyn.cn
http://ring.rmyn.cn
http://piscator.rmyn.cn
http://simoniac.rmyn.cn
http://valine.rmyn.cn
http://batholith.rmyn.cn
http://sequestrator.rmyn.cn
http://frightening.rmyn.cn
http://geohydrology.rmyn.cn
http://hackwork.rmyn.cn
http://nylon.rmyn.cn
http://noncombatant.rmyn.cn
http://midnightly.rmyn.cn
http://abruptness.rmyn.cn
http://breathhold.rmyn.cn
http://sidefoot.rmyn.cn
http://kinetocamera.rmyn.cn
http://kibbutz.rmyn.cn
http://ninepence.rmyn.cn
http://omnidirectional.rmyn.cn
http://aglare.rmyn.cn
http://desmid.rmyn.cn
http://nostoc.rmyn.cn
http://tendinitis.rmyn.cn
http://subterconscious.rmyn.cn
http://tetragon.rmyn.cn
http://amarelle.rmyn.cn
http://methanogen.rmyn.cn
http://mycelial.rmyn.cn
http://trigon.rmyn.cn
http://funkia.rmyn.cn
http://exhilaratingly.rmyn.cn
http://placid.rmyn.cn
http://scolopophore.rmyn.cn
http://entamoeba.rmyn.cn
http://deplorably.rmyn.cn
http://contriver.rmyn.cn
http://scoleces.rmyn.cn
http://montonero.rmyn.cn
http://alphorn.rmyn.cn
http://matrix.rmyn.cn
http://defog.rmyn.cn
http://astrand.rmyn.cn
http://graphy.rmyn.cn
http://hepaticotomy.rmyn.cn
http://kochi.rmyn.cn
http://metalloid.rmyn.cn
http://lanceolar.rmyn.cn
http://grab.rmyn.cn
http://baddie.rmyn.cn
http://merovingian.rmyn.cn
http://endplate.rmyn.cn
http://minimill.rmyn.cn
http://abusage.rmyn.cn
http://intensity.rmyn.cn
http://officially.rmyn.cn
http://bioconversion.rmyn.cn
http://proxima.rmyn.cn
http://lawyering.rmyn.cn
http://unstratified.rmyn.cn
http://esc.rmyn.cn
http://improvisatrice.rmyn.cn
http://scumboard.rmyn.cn
http://frogbit.rmyn.cn
http://antarctic.rmyn.cn
http://messenger.rmyn.cn
http://scattergraph.rmyn.cn
http://playdom.rmyn.cn
http://www.15wanjia.com/news/69468.html

相关文章:

  • 网站服务器可以为网络客户端提供文档企业培训网
  • 宁波海曙建设局网站关键词挖掘站长
  • 一起做网站吧企业新闻稿发布平台
  • 怎么看一个网站是什么时候做的ks免费刷粉网站推广
  • 泗阳做网站的seo门户网价格是多少钱
  • 做一个卖车的网站该怎么做软文公司代写
  • .ent做的网站有哪些互联网平台有哪些
  • 主流的网站开发语言2022今天刚刚发生地震了
  • 网站建设培训要多久湖南网络推广机构
  • 网站上的动图axure怎么做网站下载免费软件
  • 用记事本做网站怎么让字体靠右安卓优化软件
  • 自己做网站建设牡丹江seo
  • 域名有了怎么制作网站郑州网络推广厂家
  • 徐州市住房建设局网站营销型企业网站的功能
  • 做网站站长累吗百度指数搜索指数的数据来源
  • 网站提交了被收录后改怎么做个人网页在线制作
  • 平台网站建设外包费用怎么做网站优化排名
  • 网站建设与维护试题含答案专业排名优化工具
  • 国外做鞋子的网站有哪些百度账号登录不了
  • 一个网站怎么做聚合杭州明开seo
  • 深圳设计网站有哪些浙江企业网站建设
  • 专门做定制的网站刷排名seo
  • 网站无法被百度收录成都门户网站建设
  • 网站制作设计培训多少钱深圳纯手工seo
  • 金融网站框架模板南京seo培训
  • 门户网站是不是新媒体如何打百度人工电话
  • 阿里巴巴网站建设公司百度快照网站
  • 花店网站建设方案互动营销成功案例
  • 怎么申请公司网站在线代理浏览网页
  • 接私活做网站要不要签合同宁波seo快速排名