项项项项 2023-02-26 17:04 采纳率: 0%
浏览 19

关于#cmake#的编译器不同问题,如何解决?

关于使用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)

  • 写回答

2条回答 默认 最新

  • GPT_Pro 2023-02-26 17:21
    关注

    该回答内容部分引用GPT,GPT_Pro更好的解决问题
    解决Cmake使用不同编译器出现的错误,可以参考以下步骤:

    1. 首先,确定你当前编译器的版本,如果是Visual Studio,一般版本会有2022、2021等;如果使用MinGW,则需要查看其具体的版本号。

    2. 然后,在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() 
      
    3. 然后,在CMakeLists.txt中设置对应的C++标准,如下所示:

      set(CMAKE_CXX_STANDARD 11) # 设置c++标准为11
      
    4. 接下来,在CMakeLists.txt中添加相关依赖库,如下所示:

      target_link_libraries(demo PUBLIC addition) # 添加addition库 
      target_link_libraries(demo PUBLIC subtract) # 添加subtract库 
      target_include_directories(demo PUBLIC Vcalc) # 将Vcalc目录加入头文件搜索路径 
      
    5. 最后,运行cmake命令来重新生成makefile文件,如下所示:

      cmake .. -G "Generator Name" # 重新生成makefile文件 
      

      上述步骤是解决cmake使用不同编译器出现的错误的方法。通过上述步骤设置了不同的编译器、标准、依赖库以及重新生成makefile文件之后就可以正常的编译代码了。
      如果回答有帮助,望采纳。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月26日

悬赏问题

  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit