[CMake] Cross compiling in Win32 environment doesn't work

Benjamin Ruard ruard at artenum.com
Mon Sep 19 09:26:49 EDT 2011


You can use the following commands to know what are compilers used in
the CMakeLists.txt:

message("C compiler: " ${CMAKE_C_COMPILER})
message("C++ compiler: " ${CMAKE_CXX_COMPILER})

Moreover, you can set them:

set(CMAKE_CXX_COMPILER ...)

regards

Benjamin JEANTY-RUARD

Le lundi 19 septembre 2011 à 14:44 +0200, Martin Kupke a écrit :
> I'm using CMake in version 2.8.5 and just want to cross compile with a 
> decicated Compiler / Linker set on my Windows machine. Of course I've 
> read the FAQ and the Tutorial, afterwards I started trying to use CMake 
> on a DOS (cmd.exe) command line interface with CMakeLists.txt and a 
> toolchain file. After all tests failed to get CMake work in the Win32 
> environment, I tried it in my private Linux (Debian Squeeze) and the 
> same procedure is successful. In Linux environment it works as 
> described, in Win32 not.
> 
> My PC has installed Windows XP including SP3.
> CMake version 2.8.5 is installed.
> My development path contains a CMakeLists.txt and a toolchain_ppc.cmake 
> file, because I want to compile on my WinXP code for an embedded 
> hardware using a PPC processor.
> The toolchain_ppc.cmake file contains the following settings:
> set (CMAKE_GENERATOR "NMake Makefiles")
> set (CMAKE_SYSTEM_NAME "Generic")
> set (CMAKE_C_COMPILER "dcc.exe")
> set (CMAKE_SYSTEM_PROCESSOR "ppc")
> 
> if(CMAKE_CROSSCOMPILING)
> message("Cross Compiling")
> endif(CMAKE_CROSSCOMPILING)
> 
> set(CMAKE_C_COMPILER "C:/WindRiver/diab/5.9.0.0/WIN32/bin/dcc.exe")
> set(CMAKE_C_FLAGS "-tPPCVLEEN:simple")
> 
> In my build environment I created an empty folder output and in the 
> command line interface (console / cmd.exe) I'm calling the cmake tool:
> D:\novero\Discovery\impl\target\CarIF_Appl\output>cmake -D 
> CMAKE_TOOLCHAIN_FILE="..\toolchain_ppc.cmake" ..
> The output of the cmake tool always is:
> -- Building for: Visual Studio 10
> Cross Compiling
> 
> As you can see my message "Cross Compiling" is shown, this introduces 
> that cmake is using the "CMAKE_CROSSCOMPILING" flag. But why the hell is 
> there always the output "-- Building for: Visual Studio 10"?
> I don't wan't to use anything from / for Visual Studio 10.
> 
> The CMakeOutput.log contains the following lines:
> The target system is: Generic -  - ppc
> The host system is: Windows - 5.1 - x86
> Compiling the C compiler identification source file "CMakeCCompilerId.c" 
> succeeded.
> Compiler: C:/WindRiver/diab/5.9.0.0/WIN32/bin/dcc.exe
> Build flags: -tPPCVLEEN:simple
> Id flags:
> 
> The output was:
> 0
> 
> 
> Compilation of the C compiler identification source "CMakeCCompilerId.c" 
> produced "a.out"
> 
> Compiling the C compiler identification source file "CMakeCCompilerId.c" 
> succeeded.
> Compiler: C:/WindRiver/diab/5.9.0.0/WIN32/bin/dcc.exe
> Build flags: -tPPCVLEEN:simple
> Id flags: -c
> 
> The output was:
> 0
> 
> 
> Compilation of the C compiler identification source "CMakeCCompilerId.c" 
> produced "CMakeCCompilerId.o"
> 
> Compiling the CXX compiler identification source file 
> "CMakeCXXCompilerId.cpp" succeeded.
> Compiler: C:/WindRiver/diab/5.9.0.0/WIN32/bin/dcc.exe
> Build flags: -tPPCVLEEN:simple
> Id flags:
> 
> The output was:
> 0
> 
> 
> Compilation of the CXX compiler identification source 
> "CMakeCXXCompilerId.cpp" produced "a.out"
> 
> Compiling the CXX compiler identification source file 
> "CMakeCXXCompilerId.cpp" succeeded.
> Compiler: C:/WindRiver/diab/5.9.0.0/WIN32/bin/dcc.exe
> Build flags: -tPPCVLEEN:simple
> Id flags: -c
> 
> The output was:
> 0
> 
> 
> Compilation of the CXX compiler identification source 
> "CMakeCXXCompilerId.cpp" produced "CMakeCXXCompilerId.o"
> 
> Determining if the C compiler works passed with the following output:
> Change Dir: 
> D:/novero/Discovery/impl/target/CarIF_Appl/output/CMakeFiles/CMakeTmp
> 
> Run Build Command:C:\PROGRA~1\MICROS~2.0\Common7\IDE\devenv.com 
> CMAKE_TRY_COMPILE.sln /build Debug /project cmTryCompileExec
> 
> 
> Microsoft (R) Visual Studio Version 10.0.30319.1.
> 
> Copyright (C) Microsoft Corp. All rights reserved.
> 
> 1>------ Build started: Project: cmTryCompileExec, Configuration: Debug 
> Win32 ------
> 
> 1>  testCCompiler.c
> 
> 1>C:\Program 
> Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): 
> warning MSB8012: 
> TargetPath(D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec) 
> does not match the Linker's OutputFile property value 
> (D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec.exe). 
> This may cause your project to build incorrectly. To correct this, 
> please make sure that $(OutDir), $(TargetName) and $(TargetExt) property 
> values match the value specified in %(Link.OutputFile).
> 
> 1>  cmTryCompileExec.vcxproj -> 
> D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec
> 
> ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
> 
> 
> 
> Detecting C compiler ABI info compiled with the following output:
> Change Dir: 
> D:/novero/Discovery/impl/target/CarIF_Appl/output/CMakeFiles/CMakeTmp
> 
> Run Build Command:C:\PROGRA~1\MICROS~2.0\Common7\IDE\devenv.com 
> CMAKE_TRY_COMPILE.sln /build Debug /project cmTryCompileExec
> 
> 
> Microsoft (R) Visual Studio Version 10.0.30319.1.
> 
> Copyright (C) Microsoft Corp. All rights reserved.
> 
> 1>------ Build started: Project: cmTryCompileExec, Configuration: Debug 
> Win32 ------
> 
> 1>  CMakeCCompilerABI.c
> 
> 1>C:\Program 
> Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): 
> warning MSB8012: 
> TargetPath(D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec) 
> does not match the Linker's OutputFile property value 
> (D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec.exe). 
> This may cause your project to build incorrectly. To correct this, 
> please make sure that $(OutDir), $(TargetName) and $(TargetExt) property 
> values match the value specified in %(Link.OutputFile).
> 
> 1>  cmTryCompileExec.vcxproj -> 
> D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec
> 
> ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
> 
> 
> 
> Determining if the CXX compiler works passed with the following output:
> Change Dir: 
> D:/novero/Discovery/impl/target/CarIF_Appl/output/CMakeFiles/CMakeTmp
> 
> Run Build Command:C:\PROGRA~1\MICROS~2.0\Common7\IDE\devenv.com 
> CMAKE_TRY_COMPILE.sln /build Debug /project cmTryCompileExec
> 
> 
> Microsoft (R) Visual Studio Version 10.0.30319.1.
> 
> Copyright (C) Microsoft Corp. All rights reserved.
> 
> 1>------ Build started: Project: cmTryCompileExec, Configuration: Debug 
> Win32 ------
> 
> 1>  testCXXCompiler.cxx
> 
> 1>C:\Program 
> Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): 
> warning MSB8012: 
> TargetPath(D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec) 
> does not match the Linker's OutputFile property value 
> (D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec.exe). 
> This may cause your project to build incorrectly. To correct this, 
> please make sure that $(OutDir), $(TargetName) and $(TargetExt) property 
> values match the value specified in %(Link.OutputFile).
> 
> 1>  cmTryCompileExec.vcxproj -> 
> D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec
> 
> ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
> 
> 
> 
> Detecting CXX compiler ABI info compiled with the following output:
> Change Dir: 
> D:/novero/Discovery/impl/target/CarIF_Appl/output/CMakeFiles/CMakeTmp
> 
> Run Build Command:C:\PROGRA~1\MICROS~2.0\Common7\IDE\devenv.com 
> CMAKE_TRY_COMPILE.sln /build Debug /project cmTryCompileExec
> 
> 
> Microsoft (R) Visual Studio Version 10.0.30319.1.
> 
> Copyright (C) Microsoft Corp. All rights reserved.
> 
> 1>------ Build started: Project: cmTryCompileExec, Configuration: Debug 
> Win32 ------
> 
> 1>  CMakeCXXCompilerABI.cpp
> 
> 1>C:\Program 
> Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): 
> warning MSB8012: 
> TargetPath(D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec) 
> does not match the Linker's OutputFile property value 
> (D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec.exe). 
> This may cause your project to build incorrectly. To correct this, 
> please make sure that $(OutDir), $(TargetName) and $(TargetExt) property 
> values match the value specified in %(Link.OutputFile).
> 
> 1>  cmTryCompileExec.vcxproj -> 
> D:\novero\Discovery\impl\target\CarIF_Appl\output\CMakeFiles\CMakeTmp\Debug\cmTryCompileExec
> 
> ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
> 
> 
> I just want to use a standard Assembler, C Compiler and Linker.
> I don't need CXX (C++) in my build environment and even I don't need 
> (want) any Visual Studio in my Cross Compilation.
> The generator for CMake shall be "NMake Makefiles" so that the generated 
> Makefile can be used with "NMake".
> 
> Hopefully you can help me out of this.
> 
> 
> _______________________________________________
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> 
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake




More information about the CMake mailing list