【发布时间】: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 机器,这使得事情变得更加困难(我猜可能是鲁莽)。
无论如何,构建确实发生了,但失败的原因有两个:
-
sh.exe在构建路径中 - 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