关于使用Cmake动态库使用不同编译器结果出错的问题
同一串代码在使用visual studio 2022 时显示无法链接
但是使用MinGW Makefiles 就可以通过
错误显示的是这个
LINK : fatal error LNK1104: 无法打开文件“lib\Debug\subtract.lib” [C:\Users\xxxx\Desktop\test\cmkedemo\build\demo.vcxproj]
cmake_minimum_required(VERSION 3.10)
project(demo VERSION 1.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
#configure_file(config.h.in config.h)
add_executable(demo main.cpp)
add_subdirectory(calc)
target_link_libraries(demo PUBLIC addition)
target_link_libraries(demo PUBLIC subtract)
target_include_directories(demo PUBLIC ${demo_BINARY_DIR}
${demo_SOURCE_DIR}/calc)
该回答内容部分引用GPT,GPT_Pro更好的解决问题
解决Cmake使用不同编译器出现的错误,可以参考以下步骤:
首先,确定你当前编译器的版本,如果是Visual Studio,一般版本会有2022、2021等;如果使用MinGW,则需要查看其具体的版本号。
然后,在CMakeLists.txt中设置对应的编译器版本,如下所示:
if(MSVC)
set(CMAKE_C_COMPILER "cl.exe") # 设置c编译器
set(CMAKE_CXX_COMPILER "cl.exe") # 设置c++编译器
set(CMAKE_GENERATOR "Visual Studio 2022") # 设置生成器
elseif(MINGW)
set(CMAKE_C_COMPILER "MinGW Makefiles") # 设置c编译器
set(CMAKE_CXX_COMPILER "MinGW Makefiles") # 设置c++编译器
endif()
然后,在CMakeLists.txt中设置对应的C++标准,如下所示:
set(CMAKE_CXX_STANDARD 11) # 设置c++标准为11
接下来,在CMakeLists.txt中添加相关依赖库,如下所示:
target_link_libraries(demo PUBLIC addition) # 添加addition库
target_link_libraries(demo PUBLIC subtract) # 添加subtract库
target_include_directories(demo PUBLIC Vcalc) # 将Vcalc目录加入头文件搜索路径
最后,运行cmake命令来重新生成makefile文件,如下所示:
cmake .. -G "Generator Name" # 重新生成makefile文件
上述步骤是解决cmake使用不同编译器出现的错误的方法。通过上述步骤设置了不同的编译器、标准、依赖库以及重新生成makefile文件之后就可以正常的编译代码了。
如果回答有帮助,望采纳。