2017-07-19 41 views
0

我有我的CMake文件中的代碼來獲得SVN版本信息,並將其推入一個定義,我的項目可以使用:添加SVN版本信息源代碼(CMake的)

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}給了我這個svn問題的windows路徑。有沒有辦法將Windows格式的`$ {CMAKE_CURRENT_SOURCE_DIR}輸出轉換爲fakeroot格式?如果沒有,是否有辦法強制SVN接受其他路徑?

回答

0

我有這個相同的問題。我的解決辦法是:

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}命令下文。

+0

確保您的路徑設置正確。 'find_package(Subversion)'對我來說是失敗的(通過QtCreator運行),所以我不得不手動設置路徑。 – AlastairG