Visual Studio C++项目通过CMake链接SFML库时报set_property错误
报错原因与解决方案
1. 直接修复当前触发的报错
你的第15行set_property命令漏写了必填的PROPERTY关键字,CMake无法识别你要设置的属性名,所以触发报错。
同时你存在CMake语法错误:CMake中引用内置变量需要用${}包裹,而不是$(),后者是Visual Studio的变量引用语法,在CMake中会导致路径识别失败,无法正常链接SFML库。
2. 修正后的完整CMakeLists.txt
# CMakeList.txt : CMake project for Dijakstra2, include source and define # project specific logic here. # cmake_minimum_required (VERSION 3.8) project(Dijakstra2) # Add source to this project's executable. add_executable (Dijakstra2 "Dijakstra2.cpp" "Dijakstra2.h") # 修正变量引用语法为${} target_link_libraries(Dijakstra2 ${CMAKE_SOURCE_DIR}/library/sfml-graphics.lib) target_link_libraries(Dijakstra2 ${CMAKE_SOURCE_DIR}/library/sfml-audio.lib) target_link_libraries(Dijakstra2 ${CMAKE_SOURCE_DIR}/library/sfml-system.lib) target_link_libraries(Dijakstra2 ${CMAKE_SOURCE_DIR}/library/sfml-window.lib) include_directories (${CMAKE_SOURCE_DIR}/include) set_property (TARGET Dijakstra2 PROPERTY CXX_STANDARD 17) # 补上漏掉的PROPERTY关键字修复报错 set_property (TARGET Dijakstra2 PROPERTY CXX_STANDARD_REQUIRED ON) # TODO: Add tests and install targets if needed.
3. 后续运行注意事项
- 编译成功后,需要将SFML的bin目录下对应的dll文件复制到生成的exe同级目录,或者将bin目录加入系统环境变量PATH,避免运行时找不到动态库的报错
- 要保证你使用的SFML版本位数和Visual Studio的编译目标架构一致,比如64位SFML要对应x64编译目标,否则会出现架构不兼容的链接错误
内容的提问来源于stack exchange,提问作者Nar
相关产品推荐
相关产品推荐

