0%

如何在 clion 运行多个 main 函数

在写 C++ 的题目的时候经常会遇到这样的问题,写了多个 cpp 文件,在 clion 中编译报错不能同时存在多 main 函数
这里写了一个小程序优雅地解决这个问,非常简单,就是就是读字符串写文件
直接修改一下 CMake 自动遍历文件即可

多个 main 函数的报错

在 clion 中写完一题,想写下一题,结果发现 main 函数不能运行

none-main

正确的解决方法

在牛客用户AAnonymous的告知下,直接修改 CMake 即可,自己写了一个傻傻的方法。在后面加入一段即可,以我的 Project 的 CMakeList.txt 为例

1
2
3
4
5
6
7
8
9
10
11
12
cmake_minimum_required(VERSION 3.15)
project(JZ_offer)

set(CMAKE_CXX_STANDARD 14)

# 遍历项目根目录下所有的 .cpp 文件
file (GLOB 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 ()

解决方法

需要在 clion 工程下 CMakeLists.txt 中加入对应的 add_executable(1.cpp 1.cpp) 即可

我编写了一个程序读取文件然后自动添加,大家可以直接下载

使用方法

终端执行或者双击打开,win 用户下载后直接打开即可
Mac 如果没有执行权限,在终端加入执行权限
$ chmod a+x Generate_Clion_Mac

在写完 cpp 文件后,放入 clion 项目运行即可,记得第一次打开自动 Enable CMakeLists.txt 的修改,否则可能需要 Rebuild
generate

代码

代码在 Github,非常简单
https://github.com/cugxuan/Clion-CMakeList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package main

import (
"fmt"
"io/ioutil"
"log"
"os"
"strings"
)

func GetFileData(filename string) string {
data, err := ioutil.ReadFile(filename)
if err != nil {
// 出现错误则退出
log.Fatal(err)
}
return string(data)
}

func main() {
// 默认当前路径
path := `./`
// 获取 当前文件的前 5 行
var cmake_file = "CMakeLists.txt"
filedata := GetFileData(cmake_file)
list := strings.Split(filedata, "\n")
list = list[:5]
// 获取当前路径的文件列表
fileInfoList, err := ioutil.ReadDir(path)
if err != nil {
log.Fatal(err)
}
//// 遍历文件列表向文件写入内容
f, err := os.Create(cmake_file)
if err != nil {
log.Fatal(err)
}
defer f.Close()
// 写入内容到文件
for _, v := range list {
f.WriteString(v + "\n")
}
for _, file := range fileInfoList {
index := strings.LastIndex(file.Name(), ".cpp")
if index != -1 {
f.WriteString("add_executable(" + file.Name() + " " + file.Name() + ")\n")
fmt.Println(file.Name())
}
}
fmt.Println("已完成")
}
如果对您有帮助,请我喝杯咖啡?