[cmake-developers] CMake strips MAKEFLAGS from environment
Taylor Braun-Jones
taylor at braun-jones.org
Thu May 21 09:31:41 EDT 2015
On Thu, May 21, 2015 at 8:56 AM, Brad King <brad.king at kitware.com> wrote:
> What are you trying to do?
>
I'm trying to implement a workaround solution for setting environment
variables in my Makefiles at build time. So what I started with was this:
set(bullseye_environment COVFILE=${PROJECT_BINARY_DIR}/bullseye/test.cov)
add_custom_target(coverage_data
COMMAND env ${bullseye_environment}
${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR} --clean-first
COMMAND env ${bullseye_environment} ${CMAKE_CTEST_COMMAND}
--output-on-failure
COMMENT "Generating test coverage data"
VERBATIM
)
Which works fine for Ninja generator. It works for Unix Makefiles too,
except that the parallelism is lost. I get errors like:
gmake[1]: warning: jobserver unavailable: using -j1. Add `+' to parent
make rule.
So I added another workound for that:
if(${CMAKE_GENERATOR} MATCHES ".* Makefiles$")
set(environment_build_flags "$ENV{MAKEFLAGS}")
endif()
add_custom_target(coverage_data
COMMAND env --unset=MAKEFLAGS ${bullseye_environment}
${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR} --clean-first --
${environment_build_flags}
COMMAND env ${bullseye_environment} ${CMAKE_CTEST_COMMAND}
--output-on-failure
COMMENT "Generating test coverage data"
VERBATIM
)
Which allows the parallelism to work properly in an environment like:
export MAKEFLAGS=$(grep -i -c ^processor /proc/cpuinfo)
make coverage_data
Taylor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150521/f2f8ac90/attachment-0001.html>
More information about the cmake-developers
mailing list