【clion】多个main方法&命令行输出中文乱码

多个main方法的解决办法

1.用add_executable添加可执行文件

每次创建一个cpp文件之后,在CMakeLists.txt文件中,添加新行

add_executable(main main.cpp)
# 每次新建一个cpp文件,就新加一行
add_executable(main2 main2.cpp)

不过这样比较麻烦,尤其是在刷oj时,每次新建cpp文件都要手动添加新行。

2.自动生成可执行文件

在CMakeLists.txt文件中,添加以下内容

# 遍历项目根目录下所有的 .cpp 文件
file (GLOB_RECURSE files *.cpp)
foreach (file ${files})
string(REGEX REPLACE ".+/(.+)\\..*" "\\1" exe ${file})
add_executable (${exe} ${file})
message (\ \ \ \ --\ src/${exe}.cpp\ will\ be\ compiled\ to\ bin/${exe})
endforeach ()

但是这样处理会有两个问题

问题一

如果一个main.cpp文件中需要导入foo.h,那么这个main.cpp编译之后是找不到foo.h文件的,对于main文件中依赖其它文件的,需要手动添加

add_executable(main main.cpp foo.h foo.cpp)

所以比较合适的办法是,对于需要依赖其它文件的(这里指的其他文件指自己编写的其他文件,并非库文件,库文件还是可以找到的),我们手动添加到CMakeLists.txt文件中,对于单个文件,就让CMake自动生成可执行文件即可。

但是上面的自动生成可执行文件,是会扫描所有的cpp文件,如何让cmake根据几级目录判断是否自动生成呢?

# 只会遍历根目录下的cpp文件,不会遍历根目录下的二级目录。
file (GLOB files *.cpp)

# 遍历项目根目录及二级目录下所有的 .cpp 文件
file (GLOB files *.cpp */*.cpp)

# 遍历根目录,二级目录,三级目录下所有的.cpp文件
file (GLOB files *.cpp */*.cpp */*/*.cpp)

# 后面的都类似
# ...

这样,仅需要调整file (GLOB files *.cpp */*.cpp */*/*.cpp) 中搜索到多少级目录,这些cpp文件就会自动生成可执行文件,而对于需要依赖其它文件的,我们就手动加入CMakeLists.txt文件即可。

当然,你也可以把*换成特定的目录,即仅对特定目录配置自动生成可执行文件

问题二

由于所有的cpp文件都是自动生成可执行文件的,所以在修改了cpp文件的文件名时,再此运行该cpp文件会报错。

举个例子:

原来的cpp文件名称为ex1_23.cpp

之后我把cpp文件的名称修改为ex1_23_sales_item_manage.cpp

再次运行这个文件,就会报以下错误

mingw32-make.exe[3]: *** No rule to make target '../c++primer/ch01/ex1_23.cpp', needed by 'CMakeFiles/ex1_23.dir/c++primer/ch01/ex1_23.cpp.obj'.  Stop.
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:1136: CMakeFiles/ex1_23.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:1143: CMakeFiles/ex1_23.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:305: ex1_23] Error 2

出现这个错误的原因是,没有reload cmake project

clion中新建的cpp文件,如果要让他可执行,就需要添加一条add_executable (${exe} ${file})记录,而每次添加这样一条记录之后,如果开启了自动重新加载cmake项目(clion根据CMakeLists.txt文件是否发生修改来判断是否需要重新加载cmake项目),那么这个文件就可以用于生成可执行文件。换句话说,如果修改了cpp文件名之后,没有及时的重新加载cmake project,那么新文件就不会生成可执行文件。

这个问题比较好解决,每次修改文件名之后,重新加载cmake project即可,

在file=》reload cmake project选项中或者cmake选项卡中选择重新加载

也可以double shift,然后输入reload即可选择reload cmake project

以上问题仅在修改已有的cpp文件的文件名时会出现,对于修改cpp文件内容并不会出现这个问题。
新建cpp文件之后也需要reload cmake project

命令行输出中文乱码

clion中的项目文件编码都是默认utf-8,mingw经过编译处理之后生成的文件也是utf-8,但是cmd默认按照gbk编码处理。

在main方法中添加以下代码即可解决问题。

system("chcp 65001"); //为了解决命令行显示中文乱码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CLion是一款功能强大的集成开发环境,主要用于C和C++的开发。在使用CLion时,我们经常需要在一个项目中包含多个源文件,每个源文件可能都有自己的main函数。 在CLion中,我们可以将多个源文件添加到同一个项目中。每个源文件都可以有自己的main函数,但只能有一个源文件被指定为“运行目标”。这是因为一个项目只能有一个入口点,也就是说只能有一个main函数作为程序的入口。 在CLion中,可以使用以下步骤来编写多个main函数的程序: 1. 创建一个新的项目,在项目设置中选择C或C++作为语言。 2. 在项目的根目录下创建多个源文件,每个源文件都可以包含一个main函数。 3. 在CLion的导航栏中点击“Edit Configurations”按钮,进入项目的配置界面。 4. 在配置界面中,点击左上角的“+”按钮,选择“Application”选项。 5. 在弹出的对话框中,选择要运行的源文件作为“Main class”。 6. 可以通过配置其他参数,如工作目录、环境变量等。 7. 点击“OK”保存配置。 现在,我们可以通过点击CLion左上角的“运行”按钮来运行项目。CLion将使用我们在步骤5中指定的源文件作为程序的入口,执行该源文件中的main函数。 在实际开发中,多个main函数的程序常用于测试和调试目的。通过在不同的源文件中编写不同的测试用例,可以方便地对程序进行单元测试和集成测试。同时,在调试时可以选择不同的main函数作为入口点,以便定位和解决问题。 总之,CLion允许在一个项目中包含多个源文件,每个源文件可以有自己的main函数。但一个项目只能有一个入口点,因此只能指定一个源文件作为运行目标。 ### 回答2: 在CLion中,一个项目通常只能有一个主函数main()。主函数是一个程序的入口点,它指示程序从哪里开始执行。 一个项目中只能有一个主函数是因为编译器需要知道从哪个主函数开始执行程序。如果有多个主函数,编译器将无法确定程序应该从哪个函数开始执行。 然而,如果你想测试多个功能或不同的代码部分,你可以使用条件编译指令来切换不同的main函数。 条件编译指令可以根据预定义的条件来选择性地包含或排除一段代码。在CLion中,你可以使用预定义的条件变量,如#ifdef和#ifndef,来控制编译过程中的代码执行。 例如,你可以使用以下条件编译指令来切换不同的main函数: ``` #ifdef MAIN1 int main() { // 第一个main函数的代码 return 0; } #endif #ifdef MAIN2 int main() { // 第二个main函数的代码 return 0; } #endif ``` 在你需要编译其中一个main函数时,可以在CLion的构建设置中定义对应的宏变量。例如,你可以通过在CMakeLists.txt文件中添加以下代码来定义和切换宏变量: ``` add_definitions(-DMAIN1) // 编译第一个main函数 // 或者 add_definitions(-DMAIN2) // 编译第二个main函数 ``` 注意:使用多个main函数可能会导致代码的混乱和可读性的降低。因此,建议在一个项目中尽量只保留一个主函数,将不同的功能和代码部分组织成不同的函数或模块。这样能更好地保持代码的清晰和可维护性。 ### 回答3: CLion 是一个集成开发环境 (IDE),主要用于 C 和 C++ 编程。在一个 CLion 的项目中,只能有一个主函数(main 函数),因为主函数是程序的起始执行点,只能有一个入口。 然而,在同一个项目中,可以有多个 C 或者 C++ 文件,每个文件有自己的函数和代码。可以在这些文件中定义其他函数,然后通过调用这些函数来实现程序的功能。这些函数可以在主函数中被调用,也可以相互之间被调用。 要在 CLion 中使用多个 main 函数,可以考虑以下两种方法方法一:在一个项目中创建多个文件,并在这些文件中定义不同的函数。在主文件中,可以调用其他文件中的函数来分别模拟多个 main 函数的功能。在运行程序时,可以选择执行不同的函数来模拟不同的入口。 方法二:如果确实需要同时运行多个具有独立入口的程序,可以创建多个单独的项目,并在每个项目中分别放置一个 main 函数。这样每个项目都有自己的独立的执行入口。可以通过打开多个 CLion 窗口来同时编辑和运行这些项目。 需要注意的是,使用多个 main 函数可能会导致代码结构混乱,增加维护的复杂性。推荐的做法是合理设计和组织代码,将不同的功能分割为不同的函数,并在一个主函数中统一调用这些函数来完成程序的逻辑。这样可以提高代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值