[CMake] cmake + ninja how to use several CPU cores?
Alan W. Irwin
Alan.W.Irwin1234 at gmail.com
Mon Jul 29 16:20:08 EDT 2019
On 2019-07-29 13:24-0400 Brad King wrote:
> On 7/29/19 11:50 AM, Dave Milter wrote:
>> Only source code are generated, so main.cpp -> main.cpp.o doesn't
>> depend on anything.
>> But generated by cmake build.ninja still require link of extern_lib
>> before starting main.cpp -> main.cpp.o
>
> If there are any custom commands in any targets on which main.cpp's
> target depends then CMake must pessimistically assume that the
> custom commands may generate a header needed to compile `main.cpp`.
Hi Brad:
Thanks for that clarification. Clearly David's test case for an external library and my own
recently corrected test case for an internal library are not consistent with that assumption which
explains the bad results we get for them.
However, I think there is still a problem when a project is consistent
with that assumption. See the attached no_custom_add_internal_library.tar.gz
which contains an extremely simple test project with no custom commands at all
(i.e., no wait and headers and source are pre-existing in all cases).
Yet for this project I get the following results with ninja.
irwin at merlin> ninja -j16 -v app
[1/7] /usr/bin/c++ -Dinternal_lib_EXPORTS -I../lib -fPIC -MD -MT CMakeFiles/internal_lib.dir/lib/lib4.cpp.o -MF CMakeFiles/internal_lib.dir/lib/lib4.cpp.o.d -o CMakeFiles/internal_lib.dir/lib/lib4.cpp.o -c ../lib/lib4.cpp
[2/7] /usr/bin/c++ -Dinternal_lib_EXPORTS -I../lib -fPIC -MD -MT CMakeFiles/internal_lib.dir/lib/lib1.cpp.o -MF CMakeFiles/internal_lib.dir/lib/lib1.cpp.o.d -o CMakeFiles/internal_lib.dir/lib/lib1.cpp.o -c ../lib/lib1.cpp
[3/7] /usr/bin/c++ -Dinternal_lib_EXPORTS -I../lib -fPIC -MD -MT CMakeFiles/internal_lib.dir/lib/lib2.cpp.o -MF CMakeFiles/internal_lib.dir/lib/lib2.cpp.o.d -o CMakeFiles/internal_lib.dir/lib/lib2.cpp.o -c ../lib/lib2.cpp
[4/7] /usr/bin/c++ -Dinternal_lib_EXPORTS -I../lib -fPIC -MD -MT CMakeFiles/internal_lib.dir/lib/lib3.cpp.o -MF CMakeFiles/internal_lib.dir/lib/lib3.cpp.o.d -o CMakeFiles/internal_lib.dir/lib/lib3.cpp.o -c ../lib/lib3.cpp
[5/7] : && /usr/bin/c++ -fPIC -shared -Wl,-soname,libinternal_lib.so -o libinternal_lib.so CMakeFiles/internal_lib.dir/lib/lib1.cpp.o CMakeFiles/internal_lib.dir/lib/lib2.cpp.o CMakeFiles/internal_lib.dir/lib/lib3.cpp.o CMakeFiles/internal_lib.dir/lib/lib4.cpp.o && :
[6/7] /usr/bin/c++ -I../lib -MD -MT CMakeFiles/app.dir/main.cpp.o -MF CMakeFiles/app.dir/main.cpp.o.d -o CMakeFiles/app.dir/main.cpp.o -c ../main.cpp
[7/7] : && /usr/bin/c++ CMakeFiles/app.dir/main.cpp.o -o app -Wl,-rpath,/home/irwin/David.Milter/20190728/test_ninja/no_gen_add_internal_library/build_dir libinternal_lib.so && :
irwin at merlin> grep cmake_object_order_depends_target_app build.ninja
build cmake_object_order_depends_target_app: phony || cmake_object_order_depends_target_internal_lib
build CMakeFiles/app.dir/main.cpp.o: CXX_COMPILER__app ../main.cpp || cmake_object_order_depends_target_app
Alan
__________________________
Alan W. Irwin
Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.org); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________
Linux-powered Science
__________________________
More information about the CMake
mailing list