我在cygwin终端中使用mingw32自定义编译器运行cmake时遇到问题。
我已经尝试了几种方法来解决我的问题,直到我从目的地testCCompiler.c
找到CmakeTmp
后才失败。
当我尝试在cmake失败后手动make
临时文件时,make命令成功运行。 (使用--debug-trycompile
保存临时文件)
这是CMakeError.log
文件的输出:
Determining if the C compiler works failed with the following output:
Change Dir: /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp
Run Build Command:"/usr/bin/make.exe" "cmTC_5e0c4/fast"
/usr/bin/make -f CMakeFiles/cmTC_5e0c4.dir/build.make CMakeFiles/cmTC_5e0c4.dir/build
make[1]: Verzeichnis „/cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp“ wird betreten
Building C object CMakeFiles/cmTC_5e0c4.dir/testCCompiler.c.o
/opt/mingw32-1.6.0/bin/i686-w64-mingw32-gcc-6.1.0.exe -o CMakeFiles/cmTC_5e0c4.dir/testCCompiler.c.o -c /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp/testCCompiler.c
i686-w64-mingw32-gcc-6.1.0.exe: error: /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp/testCCompiler.c: No such file or directory
i686-w64-mingw32-gcc-6.1.0.exe: fatal error: no input files
compilation terminated.
make[1]: *** [CMakeFiles/cmTC_5e0c4.dir/build.make:66: CMakeFiles/cmTC_5e0c4.dir/testCCompiler.c.o] Fehler 1
make[1]: Verzeichnis „/cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp“ wird verlassen
make: *** [Makefile:126: cmTC_5e0c4/fast] Fehler 2
在我看来,运行testCCompiler.c
时文件gcc-6.1.0
丢失了。
但是当我在cmake失败后手动编译它时,它会成功运行。当我在特定目录中运行make
时,它也可以正常工作(但是:编译器标识 6.4.0 ,而我的自定义编译器ID是 6.1.0 )。
为mingw32-make
手动testCCompiler.c
:
/usr/bin/cmake.exe -H/cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp -B/cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp --check-build-system CMakeFiles/Makefile.cmake 0
-- The C compiler identification is GNU 6.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp
/usr/bin/cmake.exe -E cmake_progress_start /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp/CMakeFiles /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp/CMakeFiles/progress.marks
C:/Cygwin/opt/mingw32-1.6.0/bin/mingw32-make -f CMakeFiles/Makefile2 all
mingw32-make[1]: Entering directory 'D:/programming/cpp/T2D/build/CMakeFiles/CMakeTmp'
C:/Cygwin/opt/mingw32-1.6.0/bin/mingw32-make -f CMakeFiles/cmTC_033c1.dir/build.make CMakeFiles/cmTC_033c1.dir/depend
mingw32-make[2]: Entering directory 'D:/programming/cpp/T2D/build/CMakeFiles/CMakeTmp'
cd /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp && /usr/bin/cmake.exe -E cmake_depends "Unix Makefiles" /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp/CMakeFiles/cmTC_033c1.dir/DependInfo.cmake --color=
Scanning dependencies of target cmTC_033c1
mingw32-make[2]: Leaving directory 'D:/programming/cpp/T2D/build/CMakeFiles/CMakeTmp'
C:/Cygwin/opt/mingw32-1.6.0/bin/mingw32-make -f CMakeFiles/cmTC_033c1.dir/build.make CMakeFiles/cmTC_033c1.dir/build
mingw32-make[2]: Entering directory 'D:/programming/cpp/T2D/build/CMakeFiles/CMakeTmp'
[ 50%] Building C object CMakeFiles/cmTC_033c1.dir/testCCompiler.c.o
/usr/bin/cc -o CMakeFiles/cmTC_033c1.dir/testCCompiler.c.o -c /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp/testCCompiler.c
[100%] Linking C executable cmTC_033c1.exe
/usr/bin/cmake.exe -E cmake_link_script CMakeFiles/cmTC_033c1.dir/link.txt --verbose=1
/usr/bin/cc -Wl,--enable-auto-import CMakeFiles/cmTC_033c1.dir/testCCompiler.c.o -o cmTC_033c1.exe -Wl,--out-implib,libcmTC_033c1.dll.a -Wl,--major-image-version,0,--minor-image-version,0
mingw32-make[2]: Leaving directory 'D:/programming/cpp/T2D/build/CMakeFiles/CMakeTmp'
[100%] Built target cmTC_033c1
mingw32-make[1]: Leaving directory 'D:/programming/cpp/T2D/build/CMakeFiles/CMakeTmp'
/usr/bin/cmake.exe -E cmake_progress_start /cygdrive/d/programming/cpp/T2D/build/CMakeFiles/CMakeTmp/CMakeFiles 0
我的顶级CMakeLists.txt
只是一个简单的,用于测试我的工具链配置:
cmake_minimum_required(VERSION 2.8)
project(T2D)
add_executable(T2D main.cpp)
cmake
命令位于单独的bash文件中,如下所示:
cmake .. --debug-trycompile -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc-6.1.0 \
-DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++ \
-DCMAKE_LIBRARY_PATH="/opt/mingw32-1.6.0/lib/gcc/i686-w64-mingw32/6.1.0 /opt/mingw32-1.6.0/i686-w64-mingw32/lib" \
-DCMAKE_INCLUDE_PATH="/opt/mingw32-1.6.0/lib/gcc/i686-w64-mingw32/6.1.0/include /opt/mingw32-1.6.0/lib/gcc/i686-w64-mingw32/6.1.0/include-fixed /opt/mingw32-1.6.0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++ /opt/mingw32-1.6.0/i686-w64-mingw32/include/"
除了错误的编译器识别之外,有没有人看到出了什么问题? (这是怎么回事?我已经尝试过设置CC
和CXX
变量,但这仍然没有改变任何内容; make
和mingw32-make
仍然总是使用< strong> 6.4.0 而不是 6.1.0 )