被clion默认不支持多main函数问题困扰许久, 今天终于彻底解决, 做个记录也希望能帮到有类似问题的朋友。
为什么会有这个问题
首先我们来看cmakelist这个文件
前三行是自动生成的项目的一些信息, 我们要看的就是add_executable这一句
它的形式类似于
add_executable(projectName file1.h file1.c·······)
第一个是项目名, 其它的都是头文件和源文件的文件名. 问题就出在这里, 一个项目中只需要一个main函数就够了, 其它的都可以看作是为main函数写的库, add_executable就是编译括号里面出现的所有的文件并以此创建一个exe文件. 所以被添加进add_executable中的全部文件中只能出现一个main函数.
完美的解决方案
那如何运行多个main函数呢?
我们在用dev这样的工具时会发现它为每一个cpp文件都创建了exe文件, 所以我们要做的事其实就是想办法为每一个cpp文件都创建exe文件.
比如有两个文件main1.cpp, main2.cpp
add_executable(path1 main1.cpp)
add_executable(path2 main2.cpp)
这样它就有两条编译路径了, 此时main1和main2都可以单独编译并生成exe文件
但这样我们每次新建文件都要去配置文件里面加上这么一句, 未免太麻烦了
这时可以用cmakelist的语法来完成自动化
cmake_minimum_required(VERSION 3.21)
project(C__Workplace)
set(CMAKE_CXX_STANDARD 14)#前三行不用改
#递归遍历所有的cpp文件
file (GLOB_RECURSE files *.cpp)
#将所有的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 ()
记得要开启cmakelist的自动更新, 以及在新建文件时取消勾选"Add to targets"(意思是将这个文件添加到当前编译路径中)(非常重要).
还有每次新建文件后, 要在项目文件栏右键选择reload project,重新自动生成cmakelist文件
至此Clion就被我们从一个专业的项目开发工具改造成了一个即写即用的脚本撰写工具, 非常适合只是拿c++来刷题的人.