[CMake] Does Makefile generated by CMake support make -jN?

Chaos Zhang zcsd2012 at gmail.com
Thu Jul 14 21:25:09 EDT 2016


Hi, Chuck,

Thanks for your generous help. 

Actually there is no make -j option in the already exist make flow of my
project as i  know so far. Because i have read the makefiles in detail, and
when i make my project, the sub projects in my project executed in order.

The problem i found is it cost much more time when use CMake generated
Makefile to compile a single source file with gcc. I choose a passage of gcc
options for each flow:

In alredy exist Makfile:

g++ “some gcc options like -W...”
-c -g -DMACRO1 -DMACRO2 ... -isystemdir1 -isystemdir2 ...
header_include_dir1header_include_dir2 ... -MMD -MP -MF -o src.o src.cpp

In CMake generated Makfile:

g++ “some gcc options like -W...” 
-g header_include_dir1header_include_dir2 ... -DMACRO1 -DMACRO2 ...
-isystemdir1 -isystemdir2 -o src.o -c src.cpp

other files when compile are also like above, but will cost much more
time(2-3times), could you please give me some advices? If you need more
details, please email me.

Sincere thanks,
Chao


Chuck Atkins wrote
>>
>> Thanks for your analysis for me Andrew. I can't use "-j" options, i think
>> the
> 
> reason is the project i dealed with is not parallel. Thus when i use "make
>> -jN", it couldn't work correctly every time. Obviously it caused by the
>> Makefile generated by CMake, so i wonder if there are some CMake options
>> to
>> use CPU effectively.
> 
> 
> This usually means missing dependencies the CMakeLists.txt files.  Because
> of this you get unpredictable results when compiling in parallel.  Check
> your dependencies on targets, link lines, and source files and make sure
> they are all correct and not missing anything.
> 
> 
> 
>> Because i found when i use already exist Makefile, just
>> use "make", it used about 480% CPU.
> 
> 
> The Makefile is probably explicitly adding a fixed number of -j options.
> CMake will not do this and instead rely on the user to call make with
> their
> desired appropriate level of parallelism.
> 
> 
> 
>> And when i use CMake generated Makefile, it just uesd about 96% CPU. The
>> "hardware acceleration" i said means how to
>> CPU more effectively in CMake.
>>
> 
> -jN is as good as it gets for make.  That being said, you can always try a
> different generator, like Ninja, which tends to have quite a bit better
> build times in parallel.
> 
> First things first though, you need to get your dependency problem squared
> away.  That's the underlying cause of why your parallel builds with -j are
> unpredictable.
> 
> -- 
> 
> Powered by www.kitware.com
> 
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
> 
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
> 
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
> 
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> 
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake





--
View this message in context: http://cmake.3232098.n2.nabble.com/Does-Makefile-generated-by-CMake-support-make-jN-tp7593949p7593966.html
Sent from the CMake mailing list archive at Nabble.com.


More information about the CMake mailing list