[CMake] Proper way to support 64bit and 32bit builds

cen imbacen at gmail.com
Sat Oct 29 09:46:30 EDT 2016


I tried setting CXXFLAGS and CMAKE_CXX_FLAGS to -m32 before the 
project() call but nothing changed. I could make it fail with 
"CXXFLAGS=-m32 cmake -G ..." from command line but this seems wrong. A 
minimal CMakeLists.txt example would be nice.


Hendrik Sattler je 29. 10. 2016 ob 15:25 napisal:
> You need to set these compiler flags BEFORE the project() call to let CMake detect all stuff properly. There is a CMake  variable telling you the size of a void*.
>
>
> Am 29. Oktober 2016 12:22:07 MESZ, schrieb cen <imbacen at gmail.com>:
>> Hi
>>
>> Once I switch to 32bit builds, CMake fails to recognise that
>> glibc-devel.i686 is not installed resulting in an error when running
>> make.
>> In the same way, my own FindGMP fails to recognize that gmp-devel.i686
>> is not installed. I need CMake to fail if these things are missing.
>> At least for the compiler part, I'm pretty sure I am missing some var
>> or
>> flag to tell CMake I expect a 32 bit build.
>>
>> This is what I use to switch between builds in CMakeLists.txt (ARCH var
>>
>> is irrelevant here,  I use it later on for CPack):
>>
>> if (BUILD_32)
>>         set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS
>> "-m32" LINK_FLAGS "-m32")
>>          MESSAGE(STATUS "Excluding 64bit library paths from search.")
>>          set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF)
>>          set(ARCH i686)
>> elseif (BUILD_64)
>>         set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS
>> "-m64" LINK_FLAGS "-m64")
>>          set(ARCH amd64)
>> else()
>>          set(ARCH amd64)
>> endif()
>>
>>
>> For the FindGMP module, I am not really sure what the best practice
>> is.Does the BUILD_32 and BUILD_64 flag propagate into the FindGMP? Do I
>>
>> explicitly specify paths for 32bit libs (eg: /usr/lib64) or can  cmake
>> be smarter than this?



More information about the CMake mailing list