解決QT NMAKE:-1: error: U1077: “echo”: 返回代碼“0x1”

最近用cmake構建QT工程,做了一些小實驗,期間遇到了這個問題,記錄一下。

網上看到遇到這個問題的人,問題都各有不同,我這邊遇到的問題是這樣的,我想要在CMake中將導入的第三方庫複製到生成的可執行文件的bin目錄下,於是寫了下面一段代碼:

#將依賴庫複製到目標文件夾
add_custom_command(TARGET yxwidgets PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                   ${CMAKE_SOURCE_DIR}/lib/liteavSdk/lib
                   ${bin_dir}/${CMAKE_BUILD_TYPE}
                   )

這個代碼本身沒啥語法問題,但是我搞錯了一個比較重要的點,那就是CMAKE_SOURCE_DIRCMAKE_CURRENT_SOURCE_DIR這兩個參數雖然有時候用起來效果是一樣的(工程沒有子項目的情況下),但是實際作用卻並不相同,下面看看官方文檔的解釋:

CMAKE_SOURCE_DIR:
The path to the top level of the source tree. 
當前工程目錄的頂層路徑

CMAKE_CURRENT_SOURCE_DIR:
The path to the source directory currently being processed.
This the full path to the source directory that is currently being processed by cmake.
當前正在處理的源目錄的路徑。
這是cmake當前正在處理的源目錄的完整路徑。

CMAKE_SOURCE_DIR即當前工程目錄的最頂層的路徑,因爲我們在構建工程的時候經常會嵌套工程,所以這個變量表示爲當前工程最頂層目錄中的文件夾。

CMAKE_CURRENT_SOURCE_DIR即當前正在處理的工程目錄的路徑,舉個栗子:如果你的項目中有一個工程項目A,當中包含子項目B,那麼CMAKE_SOURCE_DIR表示的是項目A在操作系統的路徑,而CMAKE_CURRENT_SOURCE_DIR表示的是子項目B的路徑。

我犯的錯誤是錯將CMAKE_SOURCE_DIR當做CMAKE_CURRENT_SOURCE_DIR來使用,結果就是cmake找不到我想要copy的路徑,於是報了這個錯誤,所以建議看到這個錯誤的同學可以檢查一下自己的cmake文件是否編寫錯誤。

改正之後的代碼:

#將依賴庫複製到目標文件夾
add_custom_command(TARGET yxwidgets PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                   ${CMAKE_CURRENT_SOURCE_DIR}/lib/liteavSdk/lib
                   ${bin_dir}/${CMAKE_BUILD_TYPE}
                   )

一句話總結,我的這個錯誤是由於CmakeList.txt編寫的庫文件目錄錯誤引起的。

 

補充:

第二次出現這個問題,是因爲程序崩潰了,我用visual studio打開了dump文件,並開啓了調試,但是vs一直沒有關閉,就去點擊運行qt,於是再次出現了這個報錯,只要將vs關閉調試或者直接將vs關閉就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章