写在前面
因为需要学习SLAM,最近装了Ubuntu系统,想到3年前在Windows系统用Visual Studio 2019编写过一个还算可以的C++程序,思考能否将其移植到Ubuntu系统中运行,从结果来看是可行的,重点是CMakeLists.txt代码的编写。
鉴于Visual Studio工程跨平台配置麻烦,而且本人之前编写一些Python程序用习惯了同公司的Pycharm。索性先将VS2019的工程转化成CLion工程,再考虑平台间移植。
从结果来看,CLion也不是必须的。实际上CLion也是使用的cmake工程编译方法,所以掌握了Ubuntu上怎么用cmake编译则一通百通。
移植准备
提到的用Visual Studio 2019编写的程序:分数计算器C++程序
其中的主要文件有:
C++代码 | 头文件 |
---|---|
Submitted Program 1.cpp | |
Calculation.cpp | Calculation.h |
Fraction.cpp | Fraction.h |
新建FractionalCalculator文件,将这几个文件复制进去,其中第一个C++代码改名为main.cpp;为了显示美观,我将另2个C++代码放入src子文件夹,另2个头文件放入inc文件夹。
Ubuntu平台CLion工程
如图所示,新建CMakeLists.txt文件,写入:
cmake_minimum_required(VERSION 3.20)
project(FractionalCalculator)
set(CMAKE_CXX_STANDARD 14)
file(GLOB_RECURSE SOURCES "src/*.cpp")
include_directories(inc)
add_executable(FractionalCalculator main.cpp ${SOURCE_FILES} ${SOURCES})
然后点击main.cpp以项目形式打开CLion(2021.2.2版本),编译运行即可。在Ubuntu平台的CLion IDE中运行会调试不会出现输出中文乱码的情况。
Ubuntu平台cmake工程
如果直接在终端用cmake编译,需要对CMakeLists.txt文件作以修改,修改后如下:
cmake_minimum_required(VERSION 3.16)
project(FractionalCalculator)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -finput-charset=GBK -fexec-charset=UTF-8")
file(GLOB_RECURSE SOURCES "src/*.cpp")
include_directories(inc)
add_executable(FractionalCalculator main.cpp ${SOURCE_FILES} ${SOURCES})
首先改了最低版本,因为我的Ubuntu20.04上装的cmake是3.16.1版,与CLion中用的cmake版本不同。
其次指定了输入和输出字符编码,参考关于UTF-8、GBK编码以及编译时charset的指定的一些总结,由于当初代码编写的cout语句中有中文,所以-finput-charset=GBK
;由于Ubuntu系统的中文字符编码默认是zh_CN.UTF-8,所以-fexec-charset=UTF-8
。
然后打开终端,执行cmake编译的一般流程:
mkdir build
cd build
cmake ..
make
这样做的好处是,编译生成的中间文件全部放在了build文件夹中方便管理。
./FractionalCalculator
执行后查看运行效果:
Windows平台CLion工程
与前面Ubuntu平台的CLion工程配置方法类似,只要编写CMakeList.txt即可。
但是Windows平台下在CLion IDE中运行或调试时,总有其中一种输出的中文乱码(或是运行或是调试的输出),在CMakeList.txt中添加指定字符编码-finput-charset=GBK
也不行。
索性打开菜单栏的运行选项,设置在外部控制台中运行,这样不管是调试还是运行都不会乱码。