Vim+CMake+MinGW配置C/C++開發環境

sine49發表於2018-04-03

Vim有多強就不必說了,一句話:要多強有多強。剛安裝好的Vim是比較平凡的,想要更得心應手,可以參考各種部落格或者github上開源的vimrc檔案。需要注意的是,Windows下Vim的目錄和配置檔案與Linux有所不同,配置檔案是$VIM/_vimrc,外掛目錄是$VIM/vimfiles;我這裡推薦文末的參考資料[1]

我們希望的是,Vim像一個IDE一樣編寫原始碼,構建工程,編譯和除錯,不能說,我用Vim編輯好了程式原始碼,編寫了CMakeLists.txt,然後再從Vim中切出去,另開一個程式完成其他功能。在Normal模式下,可以通過 ! 字首可以執行 shell 命令,例如:

:!cmake CMakeLists.txt
:!mingw32-make

可以開幹了。Vim安裝過程略,CMake安裝過程略,MinGW安裝過程略。

安裝完成之後,將MinGW/bin和CMake/bin新增到環境變數中,以便cmd下能正常使用各種指令。

接下來就是激動的測試環節了。很多部落格上都用了“hello world cmake”來作為測試程式。test1.cpp和CMakeLists.txt都是仿照部落格[2][3][4]編寫。

test1.cpp

#include <iostream>  
using namespace std;  
int main(){
        cout << "hello word cmake!!!" <<  endl;  
        return 0;  
}  

CMakeLists.txt

set(CMAKE_C_COMPILER "gcc")
set(CMAKE_C_FLAGS "-g -Wall -I C:\\MinGW\\include -L C:\\MinGW\\lib")
set(CMAKE_CXX_COMPILER "g++")
PROJECT(c_vim_test)
set(SRC_LIST test1.cpp)
ADD_EXECUTABLE(c_vim_test ${SRC_LIST})
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})  
MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})  

正常情況下,在我們已經配置好的Vim中輸入下面兩個命令,測試就可以完成

:!cmake -G "MinGW Makefiles" 
:!make

出現了兩個問題

1.問題出在生成Makefile上,報了一個錯誤,大概意思是我的環境變數裡恰好有個git/sh.exe,而生成Makefile的時候cmd環境不能有sh.exe這個指令存在。無論是用一些程式碼託管,還是要改造Vim黑科技,按理說都離不開git,總不能生成Makefile之前去改一下環境變數然後,生成完再改回來吧。那麼只有尋求更精明的方式,由參考資料[5]給出:

只需要在Vim中將命令改為:

:!cmake -G "MinGW Makefiles" -DCMAKE_SH="CMAKE_SH-NOTFOUND"

第一個問題得以解決。

2.第二個問題說起來真的是zz問題,看到的部落格截圖大多都是這樣的:(圖源參考資料[2][4])

然而我輸入make真的沒有用啊!我的配置環境裡真的沒找到make程式,只有mingw32-make,後來我在一篇博文中看到,博主為了保持統一把mingw32-make直接改名為make使用,有點恍然大悟悵然若失的感覺,真的沒心情去考究舊版本的MinGW是不是有make程式了,反正把它當作不存在好了,編譯命令改為:

:!mingw32-make

編譯完成之後,就地執行程式:

:!c_vim_test.exe

上面的編碼以及操作過程,僅作為演示,實際使用時,對Vim的改造,對工程專案更細緻地管理等,都會讓整個過程顯得更加自然、流暢、高效。隨著學習的深入,我相信對Vim的掌握,對專案的管理以及編碼水平,都會逐步提高。

參考資料:

[1]https://github.com/yangyangwithgnu/use_vim_as_ide

[2]https://blog.csdn.net/xiaopangzi313/article/details/53115702

[3]https://blog.csdn.net/xiaopangzi313/article/details/53117923

[4]https://www.cnblogs.com/findumars/p/6375965.html

[5]https://stackoverflow.com/questions/41333215/mingw-sh-exe-must-not-be-in-your-path


相關文章