在CLion中使用CMake编译带有参数的C++会引发错误,而在终端中编译则不会

Compiling C++ with parameters using CMake in CLion throws errors while compiling in terminal does not

本文关键字:编译 错误 终端 CLion CMake 参数 C++      更新时间:2023-10-16

我有一个简单的代码,它使用SFML库,需要使用进行编译

CCD_ 1参数。

当我简单地使用cmd 时,它工作得很好

g++ gejm.cpp -o gejm -lsfml-graphics -lsfml-system -lsfml-window
.gejm.exe

然而,当我使用CLion运行它时,我会出现错误,就好像我的参数没有被传递一样。但我知道我的参数被传递了,因为如果我拼错了其中的任何一个,在我的代码被编译之前就会抛出错误。

我的CMakeLists.txt看起来像这个

set(GCC_COVERAGE_COMPILE_FLAGS "-lsfml-graphics -lsfml-system -lsfml-window")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
add_executable(gejm gejm.cpp)

那么问题出在哪里呢?

这是的错误

CMakeFilesgejm.dir/objects.a(gejm.obj): In function `main':
D:/Projects/CPP/GUI/gejm.cpp:8: undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
D:/Projects/CPP/GUI/gejm.cpp:8: undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
D:/Projects/CPP/GUI/gejm.cpp:8: undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
D:/Projects/CPP/GUI/gejm.cpp:9: undefined reference to `_imp___ZNK2sf10WindowBase6isOpenEv'
D:/Projects/CPP/GUI/gejm.cpp:11: undefined reference to `_imp___ZN2sf10WindowBase9pollEventERNS_5EventE'
D:/Projects/CPP/GUI/gejm.cpp:13: undefined reference to `_imp___ZN2sf6Window5closeEv'
D:/Projects/CPP/GUI/gejm.cpp:17: undefined reference to `_imp___ZN2sf5ColorC1Ehhhh'
D:/Projects/CPP/GUI/gejm.cpp:17: undefined reference to `_imp___ZN2sf12RenderTarget5clearERKNS_5ColorE'
D:/Projects/CPP/GUI/gejm.cpp:18: undefined reference to `_imp___ZN2sf6Window7displayEv'
D:/Projects/CPP/GUI/gejm.cpp:8: undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
D:/Projects/CPP/GUI/gejm.cpp:8: undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
collect2.exe: error: ld returned 1 exit status
CMakeFilesgejm.dirbuild.make:84: recipe for target 'gejm.exe' failed
CMakeFilesMakefile2:71: recipe for target 'CMakeFiles/gejm.dir/all' failed
mingw32-make.exe[3]: *** [gejm.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/gejm.dir/all] Error 2
CMakeFilesMakefile2:83: recipe for target 'CMakeFiles/gejm.dir/rule' failed
mingw32-make.exe[1]: *** [CMakeFiles/gejm.dir/rule] Error 2
mingw32-make.exe: *** [gejm] Error 2
Makefile:117: recipe for target 'gejm' failed

这不是添加库的方法:

set(GCC_COVERAGE_COMPILE_FLAGS "-lsfml-graphics -lsfml-system -lsfml-window")

将这些库添加到库列表中:

target_link_libraries(gejm PUBLIC sfml-graphics sfml-system sfml-window)

它不起作用的原因是链接阶段不是编译阶段,您只覆盖编译标志,而不是链接标志。无论如何,这不是一条正确的路。使用CMake提供的,不要在中破解