好的,这么长的标题......我已经为Cygwin emacs-w32切换了我的Mingw Emacs,但遇到了一些具有挑战性的路径(?)问题。
我使用i686-w64-mingw32-gcc(以前称为-mno-cygwin)进行编译。
在普通终端,我得到:
$ i686-w64-mingw32-gcc exp.c -v
Using built-in specs.
COLLECT_GCC=i686-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i686-w64-mingw32/4.8.2/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: /cygdrive/i/szsz/tmpp/32gcc/mingw64-i686-gcc-4.8.2-1/src/gcc-4.8.2/configure --srcdir=/cygdrive/i/szsz/tmpp/32gcc/mingw64-i686-gcc-4.8.2-1/src/gcc-4.8.2 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib --datarootdir=/usr/share --docdir=/usr/share/doc/mingw64-i686-gcc --htmldir=/usr/share/doc/mingw64-i686-gcc/html -C --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-w64-mingw32 --without-libiconv-prefix --without-libintl-prefix --with-sysroot=/usr/i686-w64-mingw32/sys-root --with-build-sysroot=/usr/i686-w64-mingw32/sys-root --disable-multilib --disable-win32-registry --enable-languages=c,ada,c++,fortran,objc,obj-c++ --enable-fully-dynamic-string --enable-libgomp --enable-sjlj-exceptions --enable-version-specific-runtime-libs --with-dwarf2 --enable-decimal-float=bid --enable-lto
Thread model: win32
gcc version 4.8.2 (GCC)
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=pentiumpro'
/usr/libexec/gcc/i686-w64-mingw32/4.8.2/cc1.exe -quiet -v -U_REENTRANT exp.c -quiet -dumpbase exp.c -mtune=generic -march=pentiumpro -auxbase exp -version -o /tmp/cc6glCby.s
这样有效。请注意cc1.exe前面的路径。这似乎是一个合理的地方。
我尝试将emacs-w32设置为具有相同的路径。回显终端中的$ PATH和来自emacs的M-x shell命令“echo $ PATH”的输出给出了相同的结果。据我所知它有一个工作路径,我尝试的所有命令,包括'ls','make'以及一些本地命令,都按预期工作,即使在Makefile中也是如此。除了执行此操作的i686-w64-mingw-gcc:
Using built-in specs.
COLLECT_GCC=i686-w64-mingw32-gcc
Target: i686-w64-mingw32
Configured with: /cygdrive/i/szsz/tmpp/32gcc/mingw64-i686-gcc-4.8.2-1/src/gcc-4.8.2/configure --srcdir=/cygdrive/i/szsz/tmpp/32gcc/mingw64-i686-gcc-4.8.2-1/src/gcc-4.8.2 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib --datarootdir=/usr/share --docdir=/usr/share/doc/mingw64-i686-gcc --htmldir=/usr/share/doc/mingw64-i686-gcc/html -C --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-w64-mingw32 --without-libiconv-prefix --without-libintl-prefix --with-sysroot=/usr/i686-w64-mingw32/sys-root --with-build-sysroot=/usr/i686-w64-mingw32/sys-root --disable-multilib --disable-win32-registry --enable-languages=c,ada,c++,fortran,objc,obj-c++ --enable-fully-dynamic-string --enable-libgomp --enable-sjlj-exceptions --enable-version-specific-runtime-libs --with-dwarf2 --enable-decimal-float=bid --enable-lto
Thread model: win32
gcc version 4.8.2 (GCC)
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=pentiumpro'
cc1 -quiet -v -iprefix /bin/../lib/gcc/i686-w64-mingw32/4.8.2/ -U_REENTRANT exp.c -quiet -dumpbase exp.c -mtune=generic -march=pentiumpro -auxbase exp -version -o /cygdrive/c/Users/Thomas/AppData/Local/Temp/ccC472Qu.s
i686-w64-mingw32-gcc: error: spawn: No such file or directory
所以唯一的区别是这次gcc-wrapper没有在cc1之前放置一个路径,大概是因为它无法在它预期的某个路径中找到它。
但它也不会打印任何COLLECT_LTO_WRAPPER,无论这意味着......
这发生在makefile和M-x shell-command中。它不会发生在像M-x shell这样的交互式shell中。所以它闻起来像是一个互动/非互动的问题。
但由于路径相同,我不知所措。有任何想法的人吗?
此时主要嫌疑人:COLLECT_LTO_WRAPPER,为什么不打印非交互式版本?