[CMake] Properly Detecting Win64

Michael Jackson mike.jackson at bluequartz.net
Mon Jan 17 13:27:39 EST 2011


On Jan 17, 2011, at 1:23 PM, Eric Noulard wrote:

> 2011/1/17 Michael Jackson <mike.jackson at bluequartz.net>:
>> I have the following code:
>> 
>> if ( "${CMAKE_SIZEOF_VOID_P}" EQUAL "8" )
>>        set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-Win64")
>> elseif( "${CMAKE_SIZEOF_VOID_P}" EQUAL "4" )
>>        set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-Win32")
>> else()
>>        set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-Unknown")
>> endif()
>> 
>> I properly generate VS 2008 Win64 projects. Everything builds fine. When I build the "PACKAGE" project I get a zip file with "-Unknown" in the name. This will usually configure OK the first time or so, ie, I get a Zip file name with "-Win64" but after a few more configs this seems to revert back to "Unknown". Searching the "CMakeCache.txt" file for "CMAKE_SIZEOF_VOID_P" comes up empty. Is this some sort of temporary variable?
> 
> Shouldn't be "temporary" just "not in cache".
> 
>> Do I need to store it in my own cache variable somewhere?
> 
> I don't think you should.
> Looks like a bug to me, how come CMAKE_SIZEOF_VOID_P
> would it be defined "sometimes" but not **always**...
> 
> need to dive into the source of this definition, may be it is not always
> defined because it is "indirectly" defined in the chain of CMake processing due
> to CMake cache.
> 
> By the way shouldn't you use
> 
> if (CMAKE_SIZEOF_VOID_P EQUAL 8)
> 
> instead of
> 
> if ( "${CMAKE_SIZEOF_VOID_P}" EQUAL "8" )
> 
> from the doc I think EQUAL is for values whereas STREQUAL is for string.
> 
> 
> -- 
> Erk
> Membre de l'April - « promouvoir et défendre le logiciel libre » -
> http://www.april.org

It seems like if I start with a clean build directory then CMAKE_SIZEOF_VOID_P will be the proper value for the environment I am running in. But then after a while (many runs of CMake) the value seems to get "lost" or otherwise is NOT in the cache any longer. Kind of odd really.

You are probably right about the improper use of the "if" command. I never really know which one to use and when something does not work when I _think_ it really *should* work then I start trying all sorts of stuff.

Maybe someone else has some ideas as to why CMAKE_SIZEOF_VOID_P might not be defined.
___________________________________________________________
Mike Jackson                      www.bluequartz.net




More information about the CMake mailing list