首页 > 解决方案 > 遗留的交叉编译功能意外消失了——我怎么知道发生了什么?

问题描述

我在一个非常受限的环境中发展。由于官僚主义的原因,我需要做以下事情:

(1) 在 Windows 上为 Linux 目标编译可执行文件;

(2) 在不安装新软件或软件包的情况下这样做;

(3) 通过 Cygwin 命令终端执行此操作。

这些是我绝对无法改变的固定常数。

以前,由于我无法解释的原因,Cygwin 默认为 Linux 目标编译,我能够毫无问题地维护这个过程。研究这个问题,我不确定它是如何默认这种行为的。

然而,今天早些时候,我介绍了一个同事的脚本来简化我的构建过程,将 CMakeFiles 和 CMakeCache.txt 放在构建目录而不是我的项目文件夹中。作为其中的一部分,我原来的 CMakeFiles 和 CMakeCache 目录丢失了。

然后,我尝试手动将 CC 和 CXX 路径导出到编译器进行编译,尝试了我可以在我的计算机上找到的每个 *gcc.exe 和 *g++.exe 可执行文件。我知道大多数(如果不是全部)跨平台编译工具都以 Linux 的名称标记交叉编译可执行文件,但在任何 Cygwin 驱动器位置都没有找到此类文件。

我还注销并让另一个用户登录以尝试构建,但这具有相同的结果。

我尝试恢复仍在回收站中的 CMakeFiles 和 CMakeCache 文件,但重复使用这些文件被证明是无效的。

我知道的:

  1. Cygwin 中有一个 /opt/gcc-tools/ 目录,其中不包含 gcc 可执行文件,但是在项目初始安装到系统中的过程中,有人在搞乱它。/opt/ 目录中没有其他已安装的文件或程序。

  2. 将 CC 和 CXX 路径设置回 null 会导致 CMake 默认为 /usr/bin/cc 和 /usr/bin/c++。这些文件没有 linux 版本。

  3. MinGW 已安装,我不确定它是否与跨平台怪异有关。

  4. 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 文件。希望这将阐明系统在此过程中最初是如何工作的。

标签: linuxgcccmakecygwincross-platform

解决方案


推荐阅读