了解如何在 Exercism 上測試你的 C++ 練習。
每個練習都會提供單元測試和一份 CMake 建置設定。你則負責提供實作。 每個測試檔案都會連結你的實作,產生一個執行這些測試的主控台執行檔。執行測試執行檔時,會為每個失敗的測試印出訊息,並在測試失敗時回報非零的結束狀態。
注意: 每次建置專案時,你的程式碼都會拿來和測試套件比對。即使你的程式碼沒有通過一項或多項測試,只要它是合法的 C++ 程式碼,仍然會被編譯。
完成每個練習的流程如下:
每個練習都會附帶一個CMakeLists.txt檔案,以及單元測試。這個檔案含有現成的 CMake 設定,會為你處理建置工作。你應該不需要編輯這個檔案。提供的設定會假設你的實作是由一個標頭檔和一個原始檔組成,檔名與練習相同。
例如,練習bob會預期實作出現在bob.h和bob.cpp中。若練習名稱中含有連字號,原始檔會改以底線命名,因此word-count預期的是word_count.h和word_count.cpp。如果你的實作夠簡單,可以全部放在標頭檔裡,那麼就能省略cpp檔。
請在執行 CMake 之前先建立好你的初始實作檔案。 如果你在為練習bob執行 CMake 時,還沒有bob.h和bob.cpp這兩個檔案,CMake 就會產生找不到檔案的錯誤。這些檔案可以是空的,但必須存在。
使用這份設定,你只要執行cmake -G,並指定合適的產生器和練習所在目錄的位置,CMake 就能為你的環境產生合適的專案。CMake 會產生適合你作業系統的建置指令碼。為了讓這些產生的檔案和你的練習原始碼分開,常見做法是建立一個名為build的目錄,用來存放產生的建置檔案,以及編譯後的程式碼。這樣能讓你的練習資料夾保持整潔。
CMake 建立好建置環境後,你就能用適合自己環境的指令來建置程式碼:
make
make 若使用 exercism CLI 應用程式
以下示範如何在不同的環境中執行 CMake。
CMake 的產生器名稱是Unix Makefiles。假設目前練習是bob,而我們位於練習資料夾中:
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
這個範例示範在執行 CMake 之前,先為實作建立空檔案。
只要在建置目錄中輸入make,就能編譯測試。這應該會產生編譯時期的錯誤。錯誤修正後,make就會建置並執行測試。
Visual Studio 原生支援 CMake 專案,所以你應該不需要另外安裝 CMake,也不需要在 Visual Studio 之外執行它。請依照這份指南在 Visual Studio 中設定 CMake 專案。
CMake 的產生器名稱是Xcode。假設目前練習是bob,而我們位於練習資料夾中:
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..
這個範例會產生 XCode 檔案,讓你可以在 XCode 中開啟專案。在 XCode 中開啟專案後,你可能需要新增另一個 target。新增 target 時,請從選單依序前往 File -> New -> Target,選擇 OS X \ Application \ Command Line Tool -> Next,語言選 C++,並提供 target 名稱。接著用這個 target 執行程式碼。
如果你的終端機拋出Xcode x.x not supported錯誤,很可能是你的電腦沒有安裝 Xcode,或是你的版本過舊。請透過 App Store 或這個連結下載並安裝 Xcode。類似The CXX compiler identification is unknown的錯誤,通常可以依照安裝 GCC 的說明,或按照上一段所述在 Xcode 中新增另一個 target 來解決。
CMake 的產生器名稱是Unix Makefiles。假設目前練習是bob,而我們位於練習資料夾中:
$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test
在這個範例中,我們確實會在執行 CMake 之前為實作建立空檔案,但不會建立空的建置目錄。這是因為 Exercism CLI 會使用根目錄中的.exercism/metadata.json檔案來解析測試案例。
只要在根目錄中輸入exercism test,就能編譯測試。這應該會產生編譯時期的錯誤。錯誤修正後,再次執行exercism test就會透過 Exercism CLI 建置並執行測試。