Reading through make documentation, seems setting -jx to MAKEFLAGS is a
no-op.

*"The `-j' option is a special case (see section Parallel
Execution<http://theory.uwinnipeg.ca/localfiles/infofiles/make/make_47.html#SEC46>).
If you set it to some numeric value, `-j 1' is always put into
MAKEFLAGSinstead of the value you specified. This is because if the
`-j' option were passed down to sub-makes, you would get many more jobs
running in parallel than you asked for. If you give `-j' with no numeric
argument, meaning to run as many jobs as possible in parallel, this is
passed down, since multiple infinities are no more than one. "*

Source: http://theory.uwinnipeg.ca/localfiles/infofiles/make/make_53.html

Jc

On Fri, Sep 9, 2011 at 3:37 PM, Mike Wittman
<michael.witt...@headwave.com>wrote:

> **
> If you are building on Linux, try
>     MAKEFLAGS=j8 make distcheck
>
> I have successfully used the MAKEFLAGS environment variable to propagate
> parallel build invocations through scripts that invoke make with fixed
> options.
>
> -Mike
>
>
> On 09/09/2011 09:21 AM, Clifford Yapp wrote:
>
> I can finally give a good concrete case where I might need to do this (or
> need some other very clever solution).
>
> I have created a distcheck command for BRL-CAD that has a lot of
> responsibilities, including doing a complete configure and build of BRL-CAD
> from a source archive expanded from a CPack tarball.  The distcheck rule
> uses cmake to fire off the build (this is to try and be future proof against
> using other tools than Make to do a distcheck) but I need to pass the
> parallel build setting -j from Make down to the ${CMAKE_COMMAND} build
> launched by the distcheck rule, and there doesn't seem to be any way to do
> it.
>
> This is the subset of the distcheck rule (somewhat edited for clarity):
>
>    ADD_CUSTOM_TARGET(distcheck
>       COMMAND ${CMAKE_COMMAND} -E echo "Stage 1:  Create source tgz, tbz2
> and zip archives from toplevel archive."
>       COMMAND cpack --config
> ${CMAKE_CURRENT_BINARY_DIR}/CPackSourceConfig.cmake
>       COMMAND ${CMAKE_COMMAND} -E echo "Stage 2:  Expand tgz archive and
> prepare to build from archive sources."
>       COMMAND ${CMAKE_COMMAND} -E tar xvzf
> ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
>       COMMAND ${CMAKE_COMMAND} -E make_directory
> _${CPACK_SOURCE_PACKAGE_FILE_NAME}-build
>       COMMAND ${CMAKE_COMMAND} -E make_directory
> _${CPACK_SOURCE_PACKAGE_FILE_NAME}-install
>       COMMAND ${CMAKE_COMMAND} -E chdir
> _${CPACK_SOURCE_PACKAGE_FILE_NAME}-build ${CMAKE_COMMAND}
> ../${CPACK_SOURCE_PACKAGE_FILE_NAME}
> -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/_${CPACK_SOURCE_PACKAGE_FILE_NAME}-install
>       COMMAND ${CMAKE_COMMAND} -E echo "Stage 3:  Compile using source from
> tgz archive."
>       COMMAND ${CMAKE_COMMAND} --build
> _${CPACK_SOURCE_PACKAGE_FILE_NAME}-build
>       )
>
> This can be successfully fired off by "make distcheck", which is the
> desired behavior.  However, the --build option doesn't respect (naturally)
> any -jN options fed to make, since they aren't specified at CMake time when
> the distcheck Makefile target is being generated.
>
> Perversely enough, if I'm understanding the issue correctly I won't be able
> to use the -jN value itself in any case, even if the Makefile can be taught
> to do something smart:
> http://old.nabble.com/MAKEFLAGS-var-does-not-show-%22-j%22-param-----td15983337.html
>
> The best idea I can come up with so far is for the CMake generated Makefile
> to write out a variable containing some CPU related variable (e.g. make
> CPUS=8 and write the value of $(CPUS) to CMakeFiles/make_cpu_flag or some
> such) and then convert the distcheck commands above into a series of
> EXECUTE_PROCESS lines in a rundistcheck.cmake file that is launched by the
> distcheck rule with a ${CMAKE_COMMAND}.  In rundistcheck.cmake, I can check
> for the presence of the make_cpu_flag file and if found add the -j parallel
> flag to the --build line before running it.  That will mean a parallel
> distcheck will have to use a different make syntax than the standard make
> -j, but at least it would be something.  Unfortunately, that means I still
> need the Makefile to let me know what was passed in up front, which means
> tweaking the CMake generated output somehow (not really sure how yet).
>
> Does anybody else have a mechanism for passing parallel build instructions
> from make down to child ${CMAKE_COMMAND} --build instances?
>
> Cheers,
> CY
>
>
> On Wed, Feb 2, 2011 at 4:32 PM, Michael Hertling <mhertl...@online.de>wrote:
>
>>  On 02/02/2011 03:34 PM, Clifford Yapp wrote:
>> > Is there any way to customize the Makefile output from CMake to
>> > include user-defined lines (say, something like "#include
>> > Makefile.inc") at the end of each Make file?
>>
>
>  [snip]
>
>
>> However, this approach is neither portable nor clean
>> nor <your-expectation-here>, so I would ask Eric's questions, too. ;)
>>
>> Regards,
>>
>> Michael
>>
>
>
> _______________________________________________
> Powered by www.kitware.com
>
>
> Visit other Kitware open-source projects at 
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at: 
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to 
> subscribe/unsubscribe:http://www.cmake.org/mailman/listinfo/cmake
>
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>



-- 
+1 919 869 8849
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to