【问题标题】:Trouble with my appveyor windows build for a simple C project on GitHub我在 GitHub 上为一个简单的 C 项目构建的 appveyor windows 出现问题
【发布时间】:2018-01-29 11:48:26
【问题描述】:

我正在维护this GitHub repo - 一个带有 CMake 的简单 C 项目,用于构建配置。它可以在 Linux 和 MacOS 上构建。

现在我想开始在 Windows 上使用 AppVeyor 为我的一个分支进行构建测试(以及在 Linux 上使用 Travis,但这只是有效,所以没有任何问题)。根据我在另一个项目中看到的类似文件,我已经设置了一个 appveyor 帐户,编辑了设置并在我要测试的分支 (drop_platform_spec) 上创建了一个 appveyor.yml file

我没有可以自己测试构建的 Windows 机器,这使得事情变得更加困难(我猜可能是鲁莽)。

无论如何,构建确实发生了,但失败的原因有两个:

  1. sh.exe 在构建路径中
  2. CMake 无法确定使用哪个 C 编译器

构建控制台输出附在下面。

我的问题:我该如何解决这个问题?特别是,我应该手动将 C 编译器设置为某个路径,如果是,是哪个路径?


构建控制台输出:

git clone -q --depth=1 --branch=drop_platform_spec https://github.com/eyalroz/tpch-dbgen.git C:\projects\tpch-dbgen
git checkout -qf 4607da63ecaead909c4ba380c5097495655c592e
Running Install scripts
set "PATH=%mingw_bin%;%PATH%"
cmake -G "MinGW Makefiles" . && mingw32-make
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.10/Modules/CMakeMinGWFindMake.cmake:12 (message):
  sh.exe was found in your PATH, here:
  C:/Program Files/Git/usr/bin/sh.exe
  For MinGW make to work correctly sh.exe must NOT be in your path.
  Run cmake from a shell that does not have sh.exe in your PATH.
  If you want to use a UNIX shell, then use MSYS Makefiles.
Call Stack (most recent call first):
  CMakeLists.txt:7 (project)
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
Command exited with code 1

注意:这个问题描述了不兼容的 sh 和 make 情况。我不认为那是我所拥有的,所以这不是骗局,但如果您认为这与我的情况有关,请在此处的答案中解释,而不是标记为骗局。

【问题讨论】:

  • 你可以试试cmake -G "MSYS Makefiles" . && make(我一般用这个,因为它在MinGW/MSYS环境下问题少)。
  • @Florian:虽然这个问题也涉及到 sh,但它看起来不像是骗子。我的意思是,阅读它,这似乎是一个不同的问题。您介意解释和/或删除“可能的欺骗”消息吗?
  • @Florian: 关于 MSYS - 我需要在我的appveyor.yml 中添加任何其他内容吗?这将如何影响 C-compiler-not-found-issue?
  • 你可以试试cmake -DCMAKE_IGNORE_PATH="C:/Program Files/Git/usr/bin" .. 吗?这通常是从 CMake 隐藏 PATH 环境的方法。所以我认为它也可以在这里工作(隐藏PATH中的所有shell)。但是,如果您的编译器(或所需的任何其他可执行文件)位于同一路径中,它将无法正常工作。
  • @Florian:所以,这行得通,但不像我想要的那样。也就是说,它解决了这两个问题,但是使用的编译器是 GCC 6.3.0,而我想要 MVSC。但是,您可以将其作为答案。另请注意,我没有从 MinGW Makefiles 切换到 MSYS makefiles。

标签: c git cmake mingw appveyor


【解决方案1】:

把我的评论变成答案

要在 CMake 中隐藏 PATH 环境中的内容,您可以使用 CMAKE_IGNORE_PATH

所以我认为它也可以在这里工作(隐藏 PATH 中的所有 shell)。但是,如果您的编译器(或所需的任何其他可执行文件)位于同一路径中,它将无法正常工作:

cmake -DCMAKE_IGNORE_PATH="C:/Program Files/Git/usr/bin" ..

参考文献

【讨论】:

    【解决方案2】:

    请检查https://github.com/eyalroz/tpch-dbgen/pull/22/files,它非常自我描述。主要与 Windows 命令行语法有关,例如set pathecho %variable% 命令行语法。这不是 Florian 所写内容的替代答案,而是补充。

    附注:没有 Windows 机器不应该阻止您进行交互式调试,请参阅 https://www.appveyor.com/docs/how-to/rdp-to-build-worker/

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      相关资源
      最近更新 更多