1 中文编译乱码
代码文件的编码设置为UTF-8,并确保编译器和环境的默认字符集也是UTF-8
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fexec-charset=GBK")# C的解决办法,或UTF-8
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")# C++ 的解决办法
CMAKE_C_FLAGS是一个CMake变量,用于存储C语言编译器的标志。
${CMAKE_C_FLAGS}用于获取当前C编译器标志的值。
-Wall选项表示开启所有警告信息。编译器将会给出潜在的代码问题的警告。
-fexec-charset=GBK选项表示设置可执行文件的字符集编码为GBK。该选项告诉编译器以GBK字符集编码方式执行可执行文件。
或
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/source-charset:utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
$<$<C_COMPILER_ID:MSVC>:/source-charset:utf-8>部分是一个条件表达式,它包含两个部分:
$<C_COMPILER_ID:MSVC>表示当前的编译器是MSVC时为真。
/source-charset:utf-8是在条件为真时要添加的编译选项,它告诉编译器将源代码文件的字符集编码设置为UTF-8。
2 set(CMAKE_C_COMPILER "gcc")指定编译器失效
在windows平台下使用cmake编译c程序时,默认使用MSVC编译器,注意看使用cmake构建时的输出信息-- The C compiler identification is指明了当前使用的编译器。当使用上面失效时,可尝试使用绝对路径。都无效时更换生成器。cmake -G "MinGW Makefiles"
3 编译后的代码不能使用gdb进行debug
cmake配置文件中配置
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_C_FLAGS_DEBUG "$ENV{CFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_C_FLAGS_RELEASE "$ENV{CFLAGS} -O3 -Wall") # c++将CMAKE_C_FLAGS_DEBUG->CMAKE_CXX_FLAGS_DEBUG。CFLAGS -> CXXFLAGS