1.问题背景

我们在使用VS Code运行和调试cpp(c++)程序时,总是经常出现恼人的“未找到Make”、“找不到Makefile入口点”的报错信息。

虽然对于我们平常编写的简单的单源文件程序,上述两条报错信息并没有实质影响,忽略它们并不影响程序生成和执行,但是总是出现,也很烦躁。对于多源文件程序开发来说,Makefile是必不可少的,下面我们逐一讨论如何解决它们。

问题1

其中“未找到Make”是由于本机中找不到make.exe这个文件,可以使用mingw64的mingw-make.exe代替,在原路径(c:\mingw64\bin)下将其复制一份并改名为make.exe即可。

问题2

“找不到Makefile入口点”是由于没有设置Makefile所致,有两种方法来解决此问题。

2.方法一:

1.手动配置Makefile
2.用make生成可执行文件

2.1.在项目根目录下新建Makefile文件,其内容如下
(注意第二行前面必须有一个Tab键)

helloworld:helloworld.cpp
g++ -std=c++23 -o helloworld helloworld.cpp

2.2.用CMD窗口,切换路径到项目根目录下,运行make

C:\>cd projects\cpp\helloworld

C:\projects\cpp\helloworld>make
g++ -std=c++23 -o helloworld helloworld.cpp

C:\projects\cpp\helloworld>.\helloworld
Hello C++ World from VS Code and the C++ extension!
3.14159

生成执行程序正常,并且程序运行正常。再次进行运行调试操作,发现不再报上述错误信息。

关于Makefile的配置,请参考:B站Makefile的简单入门视频

3.方法二:

1.使用CMake自动生成Makefile
2.然后再用make生成可执行文件

3.1.新建
CMakeList.txt
文件

在项目根目录下新建工作目录 build,并在项目根目录下新建 CMakeList.txt文件,创建内容如下,按 ctrl+S键保存,保存后 Vs Code会自动运行 cmake,编译并生成过程文件(非最终的可执行文件)。

cmake_minimum_required(VERSION 3.25)

project(helloworld)

add_executable(helloworld helloworld.cpp)

3.2.运行make报错

在终端窗口或CMD窗口,进入项目根目录下的 build目录,运行 make,生成可执行文件,发现报错如下:

终端窗口输出的错误信息摘录如下:

C:\projects\cpp\helloworld\build>make
[ 50%] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj
C:\projects\cpp\helloworld\helloworld.cpp: In function 'int main()':
C:\projects\cpp\helloworld\helloworld.cpp:18:13: error: 'numbers' has not been declared
   18 |     cout << numbers::pi << endl; //c++20鏍             ^~~~~~~
make[2]: *** [CMakeFiles\helloworld.dir\build.make:75: CMakeFiles/helloworld.dir/helloworld.cpp.obj] Error 1
make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/helloworld.dir/all] Error 2
make: *** [Makefile:90: all] Error 2

报错信息提示“number未声明”,这还是c++标准配置的问题。

3.3.修改
CMakeList.txt
文件

修改 CMakeList.txt文件,增加一条 set语句将语言标准设为 C++23,修改后内容如下,按 ctrl+S键保存,系统自动运行 cmake,编译并生成过程文件(非最终的可执行文件)。

cmake_minimum_required(VERSION 3.25)

# 设置C++标准为c++23,cmake版本最低为3.20
set(CMAKE_CXX_STANDARD 23)

project(helloworld)

add_executable(helloworld helloworld.cpp)

3.4.再次运行
make
正常

在终端窗口或CMD窗口,进入项目根目录下的 build目录,运行 make,即可生成可执行文件,启动运行输出正常。

C:\projects\cpp\helloworld\build>make
[ 50%] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj
[100%] Linking CXX executable helloworld.exe
[100%] Built target helloworld

C:\projects\cpp\helloworld\build>.\helloworld
Hello C++ World from VS Code and the C++ extension! 
3.14159

关于CMake的使用,请参考:B站Cmake的入门视频以及使用 CMake 预设进行配置和生成