问题描述:
CLion基于工程管理代码,一个工程内默认只允许一个程序入口,即一个main函数。如果出现了两个都包含main函数的文件,运行的时候,会报错如何解决呢?在创建新的文件的时候,取消勾选Add to targets即可。
问题解答:
在 CLion 中,当你创建一个新文件时,如果选择了 Add to targets
选项并且文件中包含了 main
函数,那么这个文件会被加入到工程的构建目标中。如果一个工程中存在多个包含 main
函数的文件,CLion 在构建时会出现多个程序入口,导致编译错误。
解决方法:
- 创建新文件时取消勾选
Add to targets
:- 在 CLion 中创建新文件时,系统默认会勾选
Add to targets
选项。这意味着该文件将被添加到当前工程的构建目标中。如果你不希望新文件中的main
函数被编译运行,取消勾选该选项即可。
- 在 CLion 中创建新文件时,系统默认会勾选
- 手动配置 CMakeLists.txt:
- 如果你已经添加了多个包含
main
函数的文件,你可以手动编辑CMakeLists.txt
文件,只保留一个文件作为构建目标中的main
函数入口。你可以通过以下方式处理:- 打开项目根目录下的
CMakeLists.txt
文件。 - 检查
add_executable
或target_sources
等命令,确保只包含一个包含main
函数的文件。 - 如果有多个源文件需要单独测试,可以通过设置不同的目标(targets)来实现,每个目标对应一个包含
main
函数的文件。
- 打开项目根目录下的
- 如果你已经添加了多个包含
示例:
假设你有两个文件 main1.cpp
和 main2.cpp
,你可以这样配置 CMakeLists.txt
:
# 只保留一个目标
add_executable(MyProject main1.cpp)
# 或者配置不同的目标
add_executable(MyProject1 main1.cpp)
add_executable(MyProject2 main2.cpp)
这样你可以根据需要编译和运行不同的目标。
总结:
为了避免多个 main
函数导致的编译错误,在创建新文件时,如果文件中包含 main
函数,且不希望它作为构建目标的一部分,可以取消勾选 Add to targets
。另外,也可以通过手动配置 CMakeLists.txt
文件来管理和控制构建目标。