NOTE
文章標題所提到的是指中文互聯網易於得到的搜索結果中,本方法是運行起來最為快捷的、準備起來最為簡易並且一勞永逸的。不包含stackoverflow、reddit等英文社區可能存在的更優解決方案。
小黑盒文章容易錯亂、吞圖片,請看評論區!!!
痛點所在#
眾所周知,CLion在創建項目後會自動給我們一個main.cpp,如果我們想在項目目錄中同時存放多個cpp文件,會發現其他cpp的main函數是無法運行的。
目前網上已有的各種博客和解決方案無非是:
- 在右上角的運行區域手動添加當前cpp文件的運行配置
- 在Cmake配置文件中手動引入當前cpp文件,之後重載Cmake項目,從右上角運行區域選擇需要運行的cpp
- 在Cmake配置文件中寫腳本或者直接全局引入*.cpp,在設置中勾選自動重載Cmake項目,最後從右上角運行區域選擇需要運行的cpp
- 安裝插件來一鍵在Cmake配置文件中引入,從右上角運行區域選擇需要運行的cpp
- 安裝插件來直接編譯cpp,但是運行起來不方便
但是這些方案,我認為全都不夠方便,都需要多次鼠標甚至是編輯文件操作,完全是浪費了效率,也不優雅。急需尋找一套不借助任何插件!
解決思路#
藉助腳本文件,將當前cpp文件傳遞給編譯腳本,編譯完成後在終端中執行exe成品
具體實現#
WARNING
在CLion設置中進行任何編輯之後,應該立即點擊應用按鈕,否則極可能出錯。必要的時候可以關閉設置頁面重開。
創建編譯運行腳本#
在不包含空格和中文的目錄中創建run_current.bat,其中內容按照如下格式填寫
@echo off setlocal rem Get the filename without extension set filename=%1 set target_name=%~n1 rem Navigate to the project directory cd /d %~dp0 rem Compile the CPP file 你的編譯器路徑\mingw64\bin\g++ -o 你希望編譯文件輸出的位置\OUTPUT\%target_name% %filename% if %errorlevel% equ 0 ( rem Run the executable if the build was successful 你希望編譯文件輸出的位置\OUTPUT\%target_name% ) else ( echo Build failed ) endlocal
其中,你的編譯器路徑如果你不知道,可以打開CLion>設置>構建執行部署>工具鏈>MinGW(默認)>工具集>下拉菜單
這裡面會顯示你的編譯器路徑,注意不要有空格,如果有需要在bat裡面加引號:"你的編譯器路徑\mingw64\bin\g++"
腳本的含義是接受cpp文件作為參數,然後在控制檯編譯並運行它。
你應該提前創建好這個路徑中的所有文件夾,不允許中文和空格:
一切完成後保存,複製bat文件的路徑,我這裡以D:\WORK\run_current.bat為例。在你實踐的時候記得替換成自己的目錄。
向腳本傳參#
來到CLion>設置>工具>外部工具>加號,創建一個外部程序入口。
名稱隨便寫,程序填寫cmd.exe。實參填寫/c "D:\WORK\run_current.bat" "$FileDir$\$FileName$",注意替換這裡面的bat文件位置。工作目錄填寫$ProjectFileDir$。
這裡的意思是以當前項目目錄為工作目錄調用我們的編譯運行腳本,同時把cpp文件路徑+文件名.cpp作為參數傳遞到腳本中執行。
添加快捷鍵#
來到CLion>設置>按鍵映射>外部工具>外部工具>外部工具>雙擊選擇添加鍵盤快捷鍵,這裡推薦Alt+Shift+Z,方便按還沒有熱鍵衝突。
消除“不屬於任何項目目標”警告#
由於CLion默認Cmake配置原因,除了main.cpp之外的cpp默認都不能開啟代碼洞察(如果你創建CPP文件的時候沒勾選加入項目目標的話)。
首先來到CLion>設置>構建執行部署>Cmake勾選自動重載Cmake項目:
隨後來到默認創建的CMakeLists.txt中,將set(CMAKE_CXX_STANDARD XX)這一行以下的內容刪除,替換為:
file(GLOB SOURCES "*.cpp") add_executable(項目名 ${SOURCES})
cmd控制檯顯示中文亂碼#
對於某些設備,用c++輸出中文的時候,控制檯都是亂碼。造成此現象的原因是GBK於UTF8編碼的轉換問題。來到CLion>設置>編輯器>文件編碼將全局改為GBK即可。
對於已有的UTF8編碼的cpp文件,可以打開它後雙擊shift,選擇操作,輸入文件編碼,選擇文件編碼(文件|文件屬性)。在彈出菜單中選擇GBK,最後單擊轉換即可。
爽一把#
在項目裡面任意位置新建一個cpp,隨便寫點代碼,按一下Alt+Shift+Z。終端瞬間就會開始編譯執行你當前的cpp文件啦!如絲般順滑~