[CMake] Override find_package path for qt / multiarchitecture build windows 64 and windows 32

Thomas Wolf thomas.wolf at vision.ee.ethz.ch
Fri Feb 25 06:04:48 EST 2011


> 
> Sure, the find_program() call in FindQt4.cmake has registry keys first, but if 
> you look at the docs for find_program(), all of those paths are looked at last.
> 
> The CMAKE_PREFIX_PATH and PATH variables have a higher priority, and you can 
> set those to control which Qt you want found.
> 

Hello,

thanks for the reply! It seems that it is the info I was looking for.

But till now i still did not succeed. Beforehand I have to mention that
i strongly oppose to standard path additons or environment variables to
make builds run, because i believe builds should run out of the box.

In that case, however, i think an exception is appropriate. Or to be
more specific, the build should set the environment or the variables by
itself, and leave the system as it is. This should work, because after
config phase, CMAKE has all its path in the cache, right?

So, this is what i came up with today:

snip --------------------------->

if( ${HAVE_64_BIT} )

  if( EXISTS $ENV{QTDIR64} )
    MESSAGE( STATUS "* detected QTDIR64 variable with: $ENV{QTDIR64}" )
		
    #redirect
    SET( ENV{QTDIR} $ENV{QTDIR64} )
    SET( ENV{PATH} "$ENV{PATH};$ENV{QTDIR64}/bin" )
    MESSAGE( STATUS "* redirected QTDIR variable to: $ENV{QTDIR}" )
    MESSAGE( STATUS " " )
    MESSAGE( STATUS "* PATH: $ENV{PATH}" )
    MESSAGE( STATUS " " )
		
    #set prefix path
    SET(CMAKE_PREFIX_PATH "$ENV{QTDIR64} ${CMAKE_PREFIX_PATH}" )
    MESSAGE( STATUS "* CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}" )
    #NO_CMAKE_PACKAGE_REGISTRY NO_SYSTEM_ENVIRONMENT_PATH  PATHS
$ENV{QTDIR64}}
		
    FIND_PACKAGE(Qt4 REQUIRED  HINT $ENV{QTDIR64}/bin )
  else( EXISTS $ENV{QTDIR64} )
    MESSAGE ( FATAL_ERROR " !! ARCHITECTURE detected as 64 bit, but no
QTDIR64 found in environment. Aborting !!")
    endif( EXISTS $ENV{QTDIR64} )
	
else( ${HAVE_64_BIT} )
  SET( ENV{PATH} "$ENV{PATH};$ENV{QTDIR}/bin" )
  MESSAGE( STATUS " " )
  MESSAGE( STATUS "* PATH: $ENV{PATH}" )
  MESSAGE( STATUS " " )
  FIND_PACKAGE(Qt4 REQUIRED)
endif ( ${HAVE_64_BIT} )

< --------------------------- snap

In the 64 bit console, cmake indeed goes to the QTDIR64 branch, and
QTDIR is set to QTDIR64, and as enforcing every chance i get ( :) ) for
the correct path, i set CMAKE_PREFIX_PATH to the QTDIR64 value. AND i
add it tio the path.. Specifically, I removed the 32bit QTDIR from the
stanard PATH.

*but*

..it does not work yet. So what is wrong? My output is still:


snip --------------------------->
-- * detected QTDIR64 variable with: C:\Libs\Qt\4.7.1_vc9_x64
-- * redirected QTDIR variable to: C:\Libs\Qt\4.7.1_vc9_x64
--
-- * PATH:
--
-- * CMAKE_PREFIX_PATH: C:\Libs\Qt\4.7.1_vc9_x64
-- QT_USE_FILE: C:/Program Files (x86)/CMake
2.8/share/cmake-2.8/Modules/UseQt4.cmake
--
-- QT_QTMAIN_LIBRARY_DEBUG:   C:/Libs/Qt/4.7.1_vc9/lib/qtmaind.lib
-- QT_QTMAIN_LIBRARY_RELEASE: C:/Libs/Qt/4.7.1_vc9/lib/qtmain.lib
-- QT_LIBRARY_RELEASE:
-- QT_LIBRARY_DEBUG:
--
-- current include:           C:/Libs/Qt/4.7.1_vc9/include
-- current lib:
-- definitions:               -DQT_DLL
-- CMAKE_CONFIGURATION_TYPES: DebugReleaseMinSizeRelRelWithDebInfo
-- CMAKE_BUILD_TYPE:
--  * done.
< --------------------------- snap

Note that i stripped the path output from my console output for sake of
readability, but there is no reference to qt, which i double checked.

So, what did i miss?

Regards,
Thomas



More information about the CMake mailing list