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
<mailto: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