[CMake] Setting up CMake for Windows projects

Michael Jackson mike.jackson at bluequartz.net
Mon Nov 8 17:11:44 EST 2010


On Nov 8, 2010, at 4:39 PM, Rolf Eike Beer wrote:

> Am Montag, 8. November 2010 schrieb Stormwind Developer:
>> Greetings,
>>
>> I am a complete beginner to CMake, so my problem might be trivial.
>> Nevertheless I did not find a solution yet.
>>
>> I am running Windows XP in a virtual machine on a linux host system.
>> Having CMake 2.6.4 installed I tried to run CMakeLists.txt from a
>> project I downloaded.
>>
>> My problem is, that CMake fails with message logs like this one:
>> Check for working C compiler: E:/Programme/Microsoft Visual Studio
>> 10.0/VC/bin/cl.exe
>> Check for working C compiler: E:/Programme/Microsoft Visual Studio
>> 10.0/VC/bin/cl.exe -- broken
>> CMake Error at E:/Programme/CMake
>> 2.6/share/cmake-2.6/Modules/CMakeTestCCompiler.cmake:32 (MESSAGE):
>>   The C compiler "E:/Programme/Microsoft Visual Studio
>> 10.0/VC/bin/cl.exe" is
>>   not able to compile a simple test program.
>
> If you want to build a command line build (i.e. use MSVC only as a  
> compiler,
> not as an IDE) you need to go to Start -> Programs -> Microsoft  
> Visual Studio
> -> Tools -> x86 command prompt (or x64 if you want a 64 bit binary).  
> From that
> shell you can call CMake like this and you will get a NMake makefile  
> for your
> project.

You need to start ANYTHING having to do with Visual Studio and CMake  
from this type of command prompt.

Note 1: You MUST have CMake 2.8.3 installed to use Visual Studio 2010.
Note 2: While in the command prompt and assuming "cmake" is located on  
your PATH variable you can launch the CMake GUI like this: cmake- 
gui.exe  and the CMake-Gui application will inherit all the  
environment variables that the Visual Studio Command prompt sets up.
Note 3: You can also run cmake from the command like like stated above  
giving cmake the -G argument to generate the type of projects you want.

  Type "cmake --help" for a list of those generators.

What I ended up doing what creating a new "Command Prompt" shortcut on  
my desktop, copied the contents from the bat file that the Visual  
Studio Command Prompt would have normally read and then injected some  
more paths. I'll append it at the end of this email. Note that this is  
for Visual Studio 2008. Yours would differ based on VS 2010.

This allows me to launch either a 32 bit project or a 64 bit project  
based on each batch file. I have one for each.

Hope that helps
Mike Jackson

@SET VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 9.0
@SET VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework64
@SET FrameworkVersion=v2.0.50727
@SET Framework35Version=v3.5
@if "%VSINSTALLDIR%"=="" goto error_no_VSINSTALLDIR
@if "%VCINSTALLDIR%"=="" goto error_no_VCINSTALLDIR

@echo Setting environment for using Microsoft Visual Studio 2008 Beta2  
x64 tools.

@call :GetWindowsSdkDir

@if not "%WindowsSdkDir%" == "" (
	set "PATH=%WindowsSdkDir%bin\x64;%WindowsSdkDir%bin 
\win64\x64;%WindowsSdkDir%bin;%PATH%"
	set "INCLUDE=%WindowsSdkDir%include;%INCLUDE%"
	set "LIB=%WindowsSdkDir%lib\x64;%LIB%"
)

@set PATH=%VCINSTALLDIR%\BIN\amd64;%FrameworkDir%\%Framework35Version%; 
%FrameworkDir%\%Framework35Version%\Microsoft .NET Framework 3.5 (Pre- 
Release Version);%FrameworkDir%\%FrameworkVersion%;%VCINSTALLDIR% 
\VCPackages;%VSINSTALLDIR%\Common7\IDE;%VSINSTALLDIR%\Common7\Tools; 
%VSINSTALLDIR%\Common7\Tools\bin;%PATH%
@set INCLUDE=%VCINSTALLDIR%\ATLMFC\INCLUDE;%VCINSTALLDIR%\INCLUDE; 
%INCLUDE%
@set LIB=%VCINSTALLDIR%\ATLMFC\LIB\amd64;%VCINSTALLDIR%\LIB\amd64;%LIB%

@set LIBPATH=%FrameworkDir%\%Framework35Version%;%FrameworkDir%\ 
%FrameworkVersion%;%FrameworkDir%\%Framework35Version%;%FrameworkDir%\ 
%FrameworkVersion%;%VCINSTALLDIR%\ATLMFC\LIB\amd64;%VCINSTALLDIR%\LIB 
\amd64;%LIBPATH%


@set ARCH_TYPE=x64
@set BOOST_ROOT=C:\Developer\%ARCH_TYPE%\MXABoost-1.36
@set EXPAT_INSTALL=C:\Developer\%ARCH_TYPE%\expat
@set HDF5_INSTALL=C:\Developer\%ARCH_TYPE%\hdf5-169
@set ITK_DIR=C:\Users\mjackson\Workspace\InsightToolkit-3.14.0\ 
%ARCH_TYPE%
@set MXADATAMODEL_INSTALL=C:\Developer\%ARCH_TYPE%\MXADataModel
@set QTDIR=C:\Developer\%ARCH_TYPE%\Qt-4.6.1
@set TIFF_INSTALL=C:\Developer\%ARCH_TYPE%\tiff
@set BJAM_INSTALL=C:\Applications\bjam

@SET PATH=%PATH%;C:\Applications\CMake-2.8.2\bin;%BJAM_INSTALL%

@echo BOOST_ROOT=%BOOST_ROOT%
@echo EXPAT_INSTALL=%EXPAT_INSTALL%
@echo HDF5_INSTALL=%HDF5_INSTALL%
@echo ITK_DIR=%ITK_DIR%
@echo MXADATAMODEL_INSTALL=%MXADATAMODEL_INSTALL%
@echo QTDIR=%QTDIR%
@echo TIFF_INSTALL=%TIFF_INSTALL%
@echo BJAM_INSTALL=%BJAM_INSTALL%


@goto end

:GetWindowsSdkDir
@call :GetWindowsSdkDirHelper HKLM > nul 2>&1
@if errorlevel 1 call :GetWindowsSdkDirHelper HKCU > nul 2>&1
@if errorlevel 1 echo WindowsSdkDir not found
@exit /B 0

:GetWindowsSdkDirHelper
@SET WindowsSdkDir=
@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft 
\Microsoft SDKs\Windows" /v "CurrentInstallFolder"') DO (
	if "%%i"=="CurrentInstallFolder" (
		SET "WindowsSdkDir=%%k"
	)
)
@if "%WindowsSdkDir%"=="" exit /B 1
@exit /B 0

:error_no_VSINSTALLDIR
@echo ERROR: VSINSTALLDIR variable is not set.
@goto end

:error_no_VCINSTALLDIR
@echo ERROR: VCINSTALLDIR variable is not set.
@goto end

:end



More information about the CMake mailing list