cmake practice no such file or directory

cmake 练习1 no such file or directory

cmake practice step1 no such file or directory

使用 windows 系统在进行 cmake 官网教程的习题练习时如果出现了以下问题:

-- Building for: NMake Makefiles
CMake Error at CMakeLists.txt:7 (project):
  Running

   'nmake' '-?'

  failed with:

   no such file or directory


-- Configuring incomplete, errors occurred!

这里报错虽然是 no such file or directory 但是实际上是没有指定 MinGW Makefiles 导致的,这时候我们使用 MinGW Makefiles 就可以编译成功。

如果出现 gcc.exe - broken 之类的如下情况

-- Check for working C compiler: D:/swInstall/Mingw/bin/gcc.exe
-- Check for working C compiler: D:/swInstall/Mingw/bin/gcc.exe - broken
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:67 (message):
  The C compiler

可以使将以下代码添加到 CmakeList.txt 最上面:

INCLUDE(CMakeForceCompiler) 
CMAKE_FORCE_C_COMPILER(gcc GNU)
CMAKE_FORCE_CXX_COMPILER(g++ GNU)

虽然此时会出现以下 warring,但是不要慌。

在这里插入图片描述

在当前目录已经成功的生成了 Makefile 文件,这时候使用 cmake --build . 进行编译的话会像下面一样编译失败。
CMake Error: Generator: execution of make failed. Make command was: -f Makefile

但是我们可以手动直接 make

在这里插入图片描述

至此已经成功!

为什么在windows下需要指定 MinGW Makefiles

在 cmake 源码 version 2.8.4 中有如下代码

  std::string vsregBase =
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\";
  struct VSRegistryEntryName
  {
    const char* MSVersion;
    const char* GeneratorName;
  };
  VSRegistryEntryName version[] = {
    {"6.0", "Visual Studio 6"},
    {"7.0", "Visual Studio 7"},
    {"7.1", "Visual Studio 7 .NET 2003"},
    {"8.0", "Visual Studio 8 2005"},
    {"9.0", "Visual Studio 9 2008"},
    {"10.0", "Visual Studio 10"},
    {0, 0}};
  for(int i =0; version[i].MSVersion != 0; i++)
    {
    std::string reg = vsregBase + version[i].MSVersion;
    reg += ";InstallDir]";
    cmSystemTools::ExpandRegistryValues(reg);
    if (!(reg == "/registry"))
      {
      installedCompiler = version[i].GeneratorName;
      }
    }
  cmGlobalGenerator* gen
    = this->CreateGlobalGenerator(installedCompiler.c_str());
  if(!gen)
    {
    gen = new cmGlobalNMakeMakefileGenerator;
    }
  this->SetGlobalGenerator(gen);
  std::cout << "-- Building for: " << gen->GetName() << "\n";

哈哈哈,看到了吧,如果不指定 MinGW Makefiles 的话,就会使用 Microsoft Visual Studio 附带的 nmake


请添加图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值