将 SVN 版本信息添加到源代码 (CMAKE)
Adding SVN version info to source code (CMAKE)
我的 CMake 文件中有这段代码,用于获取 SVN 版本信息并将其推送到我的项目可以使用的定义中:
find_package(Subversion)
if(SUBVERSION_FOUND)
Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} MyProj)
target_compile_definitions(MyProj PUBLIC "-DSVN_RC=${MyProj_WC_REVISION}" )
endif(SUBVERSION_FOUND)
这使用在默认 CMake 分发中找到的宏。这实际上就是宏的作用:
macro(Subversion_WC_INFO dir prefix)
execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} info ${dir}
OUTPUT_VARIABLE ${prefix}_WC_INFO
ERROR_VARIABLE Subversion_svn_info_error
RESULT_VARIABLE Subversion_svn_info_result
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT ${Subversion_svn_info_result} EQUAL 0)
message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}")
endif()
endmacro()
我的问题是这段代码失败了。我的配置输出如下所示:
CMake Error at C:/msys64/mingw32/share/cmake-3.8/Modules/FindSubversion.cmake:99 (message):
Command "C:/msys64/usr/bin/svn.exe info
C:/msys64/home/stew/proj"
failed with output:
svn: warning: W155010: The node '/home/stew/proj/build/C:/msys64/home/stew/proj/' was not found.
svn: E200009: Could not display info for all targets because some targets don't exist
我认为问题出在我的 msys 环境,它是一种假根环境。 svn info /home/stew/proj
有效,而 svn info c:/msys64/home/stew/proj
无效。 ${CMAKE_CURRENT_SOURCE_DIR}
给我 windows 路径,这对 svn 来说是个问题。有没有办法将 Windows 格式的 `${CMAKE_CURRENT_SOURCE_DIR} 输出转换成 fakeroot 格式?如果不是,有没有办法强制 SVN 接受其他路径?
我遇到了同样的问题。我的解决方案是:
execute_process(COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_SOURCE_DIR} svnversion -n OUTPUT_VARIABLE SVN_COMMIT)
${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_SOURCE_DIR}
位运行 ${CMAKE_CURRENT_SOURCE_DIR}
中的命令。
我的 CMake 文件中有这段代码,用于获取 SVN 版本信息并将其推送到我的项目可以使用的定义中:
find_package(Subversion)
if(SUBVERSION_FOUND)
Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} MyProj)
target_compile_definitions(MyProj PUBLIC "-DSVN_RC=${MyProj_WC_REVISION}" )
endif(SUBVERSION_FOUND)
这使用在默认 CMake 分发中找到的宏。这实际上就是宏的作用:
macro(Subversion_WC_INFO dir prefix)
execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} info ${dir}
OUTPUT_VARIABLE ${prefix}_WC_INFO
ERROR_VARIABLE Subversion_svn_info_error
RESULT_VARIABLE Subversion_svn_info_result
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT ${Subversion_svn_info_result} EQUAL 0)
message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}")
endif()
endmacro()
我的问题是这段代码失败了。我的配置输出如下所示:
CMake Error at C:/msys64/mingw32/share/cmake-3.8/Modules/FindSubversion.cmake:99 (message):
Command "C:/msys64/usr/bin/svn.exe info
C:/msys64/home/stew/proj"
failed with output:
svn: warning: W155010: The node '/home/stew/proj/build/C:/msys64/home/stew/proj/' was not found.
svn: E200009: Could not display info for all targets because some targets don't exist
我认为问题出在我的 msys 环境,它是一种假根环境。 svn info /home/stew/proj
有效,而 svn info c:/msys64/home/stew/proj
无效。 ${CMAKE_CURRENT_SOURCE_DIR}
给我 windows 路径,这对 svn 来说是个问题。有没有办法将 Windows 格式的 `${CMAKE_CURRENT_SOURCE_DIR} 输出转换成 fakeroot 格式?如果不是,有没有办法强制 SVN 接受其他路径?
我遇到了同样的问题。我的解决方案是:
execute_process(COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_SOURCE_DIR} svnversion -n OUTPUT_VARIABLE SVN_COMMIT)
${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_SOURCE_DIR}
位运行 ${CMAKE_CURRENT_SOURCE_DIR}
中的命令。