在CLion中使用CMake编译带有参数的C++会引发错误,而在终端中编译则不会
Compiling C++ with parameters using CMake in CLion throws errors while compiling in terminal does not
我有一个简单的代码,它使用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提供的,不要在中破解
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?