背景:
在windows環境下,使用VS2017編輯cmake工程代碼並添加中文注釋后,編譯時出現“無法識別的標記”錯誤,編譯失敗。
原因:
參考:vs編碼對編譯的影響(UTF-8 no BOM編譯通不過)
UTF-8編碼分為帶BOM和不帶BOM兩種,VS只支持帶BOM的,因此當文件為不帶BOM且有中文時,在VS下編譯可能出錯。
而在linux中gcc編譯的時候,文件格式為utf-8無BOM格式,故跨平台時,必須使用無BOM格式的。
解決方法:
方法一(跨平台時不推薦)
使用notepad++或vs code將文件格式轉換為UTF-8 with BOM編碼。
notepad++
vo code
方法二(cmake跨平台推薦)
在CMakeLists.txt中加入以下代碼,增加對UTF-8的編譯支持
if(WIN32) add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>") add_compile_options("$<$<C_COMPILER_ID:MSVC>:/source-charset:utf-8>") endif()