CLion中CMake配置target_link_libraries链接GSL库报错如何解决?
错误原因
- 你的
target_link_libraries语句中错误加入了源文件main.cpp:target_link_libraries的作用是为构建目标指定需要链接的库文件,而源文件main.cpp已经通过add_executable(untitled main.cpp)声明为可执行目标的组成部分,不需要也不能放在链接库列表里。 - 链接器收到错误参数后,会尝试查找名为
libmain.cpp的系统库,自然会触发library not found for -lmain.cpp的报错。
解决方案
直接修改CMakeLists.txt中的target_link_libraries行,删掉其中的main.cpp即可,修改后该行应为:
target_link_libraries(untitled GSL::gsl)
可选优化建议
- 不要在
CMakeLists.txt中硬编码CMAKE_CXX_COMPILER路径,这种写法会导致项目移植性极差,建议改为在执行cmake命令时通过参数指定编译器,例如cmake .. -DCMAKE_CXX_COMPILER=/usr/local/Cellar/gcc/11.1.0_1/bin/g++-11 - 你已经通过
set(CMAKE_CXX_STANDARD 17)指定了C++标准,不需要再在CMAKE_CXX_FLAGS里加-std=c++17参数,避免重复配置 - 已经通过
find_package(GSL REQUIRED)导入了GSL的官方目标GSL::gsl,不需要额外手动加include_directories(${GSL_INCLUDE_DIR}),CMake会自动为链接了GSL::gsl的目标添加对应的头文件搜索路径
内容的提问来源于stack exchange,提问作者CafféSospeso
相关产品推荐
相关产品推荐

