[CMake] CMAKE_SIZEOF_VOID_P is unset when building libgit2 on Windows

Sebastian Schuberth sschuberth at gmail.com
Tue Mar 29 06:18:02 EDT 2016


On 3/29/2016 11:39, Sebastian Schuberth wrote:

>>    $ cat CMakeLists.txt
>>    cmake_minimum_required(VERSION 3.5)
>>    project(test C)
>>    message("${CMAKE_SIZEOF_VOID_P}")
>>
>> If that reproduces the problem, try configuring with --debug-trycompile
>> so that the CMakeFiles/CmakeTmp/CMakeFiles/cmTC_*.dir/build.make files
>> will be left behind for inspection.
> 
> Yes, that does reproduce the issue, ${CMAKE_SIZEOF_VOID_P} evaluates to an empty string. I was looking at the CMakeFiles/cmTC_21eb3.dir/build.make file for CMakeCCompilerABI but was not seeing any suspicious. Calling
> 
> $ /c/Ruby-DevKit/bin/make -f CMakeFiles/cmTC_21eb3.dir/build.make cmTC_21eb3.exe
> 
> Also successfully builds the executable.
> 
> What should I try next?

Ok, I seem to have found the root cause of the problem. Altough CMake is correctly using gcc from C:/Ruby-DevKit/mingw/bin/gcc.exe, it's using gmake from C:/Strawberry/c/bin/gmake.exe (which is from Strawberry Perl that I also have installed). Ruby-DevKit does not come with gmake.exe, only with bin/make.exe (and with mingw/bin/mingw32-make.exe). But for some reason CMake seems to prefer gmake over make, despite the latter coming from the same parent directory than gcc.

While C:/Ruby-DevKit/bin/make.exe is an executable linked against MSYS-1.0.DLL that understands Unix-style paths on Windows, C:/Strawberry/c/bin/gmake.exe is a native Windows exeutable linked against MSVCRT.DLL that does not. Removing C:/Strawberry/c/bin from PATH so that CMake doe snot find gmake properly works around the issue for me.

So far, so good, but I'm yet unsure what's the best / most generic fix for this. As Ruby-DevKit is based on MSYS, I tried to replace "Unix Makefiles" in

$ cmake .. -DBUILD_CLAR=OFF -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "Unix Makefiles"

with "MSYS Makefiles" so that it reads

$ cmake .. -DBUILD_CLAR=OFF -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "MSYS Makefiles"

and that seems to work.

Brad, do you think that's a reasonable fix? What's the difference between CMake's "Unix Makefiles" and "MSYS Makefiles" anyway?

Regards,
Sebastian




More information about the CMake mailing list