如何修复 Clion 中目标错误的配方?

Posted

技术标签:

【中文标题】如何修复 Clion 中目标错误的配方?【英文标题】:How to fix recipe for target error in Clion? 【发布时间】:2019-11-26 09:43:36 【问题描述】:

我在 clion 中执行程序时收到以下错误。

"C:\Program Files\JetBrains\CLion 2019.2.3\bin\cmake\win\bin\cmake.exe" --build C:\Users\two43\CLionProjects\cse\cmake-build-debug --target cse -- -j 2
[ 25%] Linking CXX executable cse.exe
CMakeFiles\cse.dir\build.make:114: recipe for target 'cse.exe' failed
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cse.dir/objects.a(lecture-2.cpp.obj): in function `main':
C:/Users/two43/CLionProjects/cse/lecture-2.cpp:24: multiple definition of `main'; CMakeFiles\cse.dir/objects.a(lecture-1.cpp.obj):C:/Users/two43/CLionProjects/cse/lecture-1.cpp:19: first defined here
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [cse.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/cse.dir/all] Error 2
CMakeFiles\Makefile2:74: recipe for target 'CMakeFiles/cse.dir/all' failed
mingw32-make.exe[1]: *** [CMakeFiles/cse.dir/rule] Error 2
CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/cse.dir/rule' failed
mingw32-make.exe: *** [cse] Error 2
Makefile:117: recipe for target 'cse' failed

以下是CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.15)
project(cse)
set(CMAKE_CXX_STANDARD 17)
add_executable(cse main.cpp lecture-1.cpp lecture-2.cpp)

【问题讨论】:

【参考方案1】:

您正在编译两个文件,cse/lecture-1.cppcse/lecture-2.cpp。两者都包含main 函数。您不能使用多个 main 函数构建单个可执行文件。

通过在 CMake 定义中使用两次 add_executable 使它们成为单独的可执行文件。如果您提供了 CMake 定义,我将向您展示。

编辑:根据您的 CMake 定义,使用

cmake_minimum_required(VERSION 3.15)
project(cse)
set(CMAKE_CXX_STANDARD 17)
add_executable(lecture-1 main.cpp lecture-1.cpp)
add_executable(lecture-2 main.cpp lecture-2.cpp)

这假定main.cpp,尽管它的名字,不包含另一个 main 函数。如果是这样,您也需要一个单独的add_executable

【讨论】:

这是我的 cmake 定义cmake_minimum_required(VERSION 3.15) project(cse) set(CMAKE_CXX_STANDARD 17) add_executable(cse main.cpp lecture-1.cpp lecture-2.cpp) 已编辑。下次,请在您的问题中提供所有相关代码。 @NeelModi:不要等待“下一次”:将代码添加到您的问题帖子。除此之外,这是 Stack Overflow 的要求 @flyx 所以这意味着每次我将新的源文件添加到文件夹中时,我都必须为其创建一个新的单独的可执行文件。 @NeelModi 如果每个源都应该编译为单独的可执行文件,那么是的,您需要为其添加add_executable。你是否想要它是一个单独的可执行文件取决于你,但是main函数的存在意味着你这样做(因为每个可执行文件只能有一个main函数)。

以上是关于如何修复 Clion 中目标错误的配方?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Git 错误“目标文件 ... 为空”?

如何修复文本字段中错误的键盘布局导致的错误

如何修复此错误调用google位置来解决服务“目标机器主动拒绝它”

如何修复 STM32CubeProgrammer 找不到 STM32 目标

如何修复“value null Copy-Item Powershell”错误

如何修复烦人的 Visual Studio 文本编辑器光标错位错误