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

Chaos Zhang zcsd2012 at gmail.com
Sun Jul 17 21:18:12 EDT 2016


Hi, Raymond, J Decker, Andrew, Chuck,

Thanks a lot for your generous help, i have found it was dependencies
missing of my project, for i have not found my project was built in
parallel.

BTW, i have used env var "MAKEFLAGS=-j" to make in parallel, is there any
way i can set "make -j" option in CMake file? For i use Qt Creator as IDE,
and the CMake compile system is provided for other R&D teams, so i want to
make the CMake compile system as simply and automatically as i can. Could
you please give me some advice?

Thanks again,
Chao

Chaos Zhang wrote
> 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-tp7593949p7593973.html
Sent from the CMake mailing list archive at Nabble.com.


More information about the CMake mailing list