我在非常受限的环境中进行开发。由于官僚主义的原因,我需要执行以下操作:
(1)在Windows上为Linux目标编译可执行文件;
(2)这样做无需安装新软件或软件包;
(3)通过Cygwin命令终端这样做。
这些是我绝对无法更改的固定常数。
以前,出于我无法解释的原因,Cygwin默认使用Linux目标进行编译,并且我能够无问题地维护此过程。研究此问题后,我不确定它是如何默认为这种行为的。
但是,今天早些时候,我引入了一个同事的脚本来简化构建过程,将CMakeFiles和CMakeCache.txt放置在构建目录中而不是在项目文件夹中。作为其一部分,我原来的CMakeFiles和CMakeCache目录丢失了。
然后,我尝试将CC和CXX路径手动导出到编译器进行编译,尝试在计算机上找到的每个* gcc.exe和* g ++。exe可执行文件。我知道,大多数(如果不是全部)跨平台编译工具都以Linux的名称标记了交叉编译可执行文件,但在任何Cygwin驱动器位置均未找到此类文件。
我另外注销并让另一个用户登录以尝试构建,但是结果是相同的。
我尝试还原仍在回收站中的CMakeFiles和CMakeCache文件,但是重用那些无效的文件。
我所知道的:
在Cygwin中有一个/ opt / gcc-tools /目录,该目录不包含gcc可执行文件,但是在将项目初始安装到系统中时,有人在弄乱它。 / opt /目录中没有其他已安装的文件或程序。
将CC和CXX路径设置回null会导致CMake默认设置为/ usr / bin / cc和/ usr / bin / c ++。这些文件没有Linux版本。
MinGW已安装,我不确定它是否与跨平台异常有关。
在Cygwin的usr / share / cmake / modules / platform部分中,有各种LINUX- {GNU / INTEL / CLANG} .cmake文件。这些可能只是用于检查交叉编译,但是如果可以对其进行编辑以使事情正常进行,我将不会提出异议。
我的build.sh文件如下所示:
export CC=/usr/bin/gcc.exe
export CXX=/usr/bin/gcc.exe
pushd build > /dev/null
cmake ..
make all install -j8
popd /dev/null
并且以前很简单
cmake .
make
不安装或-j8
我意识到,在不访问终端和系统的情况下,这是一个很难调试的问题。我的一个目标是让cmake再次吐出a.out文件而不是a.exe文件。希望这将阐明该系统最初在该过程中的工作方式。