Commit 439fe2e2 authored by Florian Maushart's avatar Florian Maushart Committed by Brad King

cmake: Add options for verbose output to --build mode

While we already support `VERBOSE` environment variable and
`CMAKE_VERBOSE_MAKEFILE` cached variable, add `-v` and `--verbose`
command line options to be able to activate verbose output directly from
CMake's build tool mode command line.

Also make `msbuild` honor the verbosity setting. `xcodebuild` still
doesn't honor the verbosity setting as it will need a policy added
and reworking of cmGlobalGenerator and cmsys to support
multiple command invocation.
parent 638667ef
CMAKE_NO_VERBOSE
----------------
Disables verbose output from CMake when :envvar:`VERBOSE` environment variable
is set.
Only your build tool of choice will still print verbose output when you start
to actually build your project.
VERBOSE
-------
Activates verbose output from CMake and your build tools of choice when
you start to actually build your project.
Note that any given value is ignored. It's just checked for existence.
See also :ref:`Build Tool Mode <Build Tool Mode>` and
:envvar:`CMAKE_NO_VERBOSE` environment variable
......@@ -24,11 +24,13 @@ Environment Variables that Control the Build
/envvar/CMAKE_BUILD_PARALLEL_LEVEL
/envvar/CMAKE_CONFIG_TYPE
/envvar/CMAKE_MSVCIDE_RUN_PATH
/envvar/CMAKE_NO_VERBOSE
/envvar/CMAKE_OSX_ARCHITECTURES
/envvar/DESTDIR
/envvar/LDFLAGS
/envvar/MACOSX_DEPLOYMENT_TARGET
/envvar/PackageName_ROOT
/envvar/VERBOSE
Environment Variables for Languages
===================================
......
......@@ -289,6 +289,14 @@ following options:
``--use-stderr``
Ignored. Behavior is default in CMake >= 3.0.
``-v, --verbose``
Enable verbose output - if supported - including the build commands to be
executed.
This option can be omitted if :envvar:`VERBOSE` environment variable or
:variable:`CMAKE_VERBOSE_MAKEFILE` cached variable is set.
``--``
Pass remaining options to the native tool.
......
cmake-build-verbose
-------------------
* The :manual:`cmake(1)` :ref:`Build Tool Mode` (``cmake --build``) gained
``--verbose`` and ``-v`` options to specify verbose build output. Some
generators such as Xcode don't support this option currently.
......@@ -493,7 +493,7 @@ void cmGlobalUnixMakefileGenerator3::GenerateBuildCommand(
GeneratedMakeCommand& makeCommand, const std::string& makeProgram,
const std::string& /*projectName*/, const std::string& /*projectDir*/,
const std::string& targetName, const std::string& /*config*/, bool fast,
int jobs, bool /*verbose*/, std::vector<std::string> const& makeOptions)
int jobs, bool verbose, std::vector<std::string> const& makeOptions)
{
std::unique_ptr<cmMakefile> mfu;
cmMakefile* mf;
......@@ -510,6 +510,13 @@ void cmGlobalUnixMakefileGenerator3::GenerateBuildCommand(
mf = mfu.get();
}
// Make it possible to set verbosity also from command line
if (verbose) {
makeCommand.add(cmSystemTools::GetCMakeCommand());
makeCommand.add("-E");
makeCommand.add("env");
makeCommand.add("VERBOSE=1");
}
makeCommand.add(this->SelectMakeProgram(makeProgram));
if (jobs != cmake::NO_BUILD_PARALLEL_LEVEL) {
......
......@@ -961,6 +961,10 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand(
makeCommand.add("/p:CL_MPCount=1");
}
// Respect the verbosity: 'n' normal will show build commands
// 'm' minimal only the build step's title
makeCommand.add(std::string("/v:") + ((verbose) ? "n" : "m"));
makeCommand.add(makeOptions.begin(), makeOptions.end());
}
......
......@@ -2539,7 +2539,8 @@ cmMessenger* cmake::GetMessenger() const
int cmake::Build(int jobs, const std::string& dir, const std::string& target,
const std::string& config,
const std::vector<std::string>& nativeOptions, bool clean)
const std::vector<std::string>& nativeOptions, bool clean,
bool verbose)
{
this->SetHomeDirectory("");
......@@ -2592,11 +2593,11 @@ int cmake::Build(int jobs, const std::string& dir, const std::string& target,
return 1;
}
projName = cachedProjectName;
bool verbose = false;
const char* cachedVerbose =
this->State->GetCacheEntryValue("CMAKE_VERBOSE_MAKEFILE");
if (cachedVerbose) {
verbose = cmSystemTools::IsOn(cachedVerbose);
if (cmSystemTools::IsOn(cachedVerbose)) {
verbose = true;
}
#ifdef CMAKE_HAVE_VS_GENERATORS
......
......@@ -430,7 +430,8 @@ public:
///! run the --build option
int Build(int jobs, const std::string& dir, const std::string& target,
const std::string& config,
const std::vector<std::string>& nativeOptions, bool clean);
const std::vector<std::string>& nativeOptions, bool clean,
bool verbose);
///! run the --open option
bool Open(const std::string& dir, bool dryRun);
......
......@@ -68,6 +68,8 @@ static const char* cmDocumentationUsageNote[][2] = {
" --clean-first = Build target 'clean' first, then build.\n" \
" (To clean only, use --target 'clean'.)\n" \
" --use-stderr = Ignored. Behavior is default in CMake >= 3.0.\n" \
" -v --verbose = Enable verbose output - if supported - including\n" \
" the build commands to be executed. \n" \
" -- = Pass remaining options to the native tool.\n"
static const char* cmDocumentationOptions[][2] = {
......@@ -395,6 +397,7 @@ static int do_build(int ac, char const* const* av)
std::string dir;
std::vector<std::string> nativeOptions;
bool clean = false;
bool verbose = cmSystemTools::HasEnv("VERBOSE");
bool hasTarget = false;
enum Doing
......@@ -435,6 +438,10 @@ static int do_build(int ac, char const* const* av)
} else if (strcmp(av[i], "--clean-first") == 0) {
clean = true;
doing = DoingNone;
} else if ((strcmp(av[i], "--verbose") == 0) ||
(strcmp(av[i], "-v") == 0)) {
verbose = true;
doing = DoingNone;
} else if (strcmp(av[i], "--use-stderr") == 0) {
/* tolerate legacy option */
} else if (strcmp(av[i], "--") == 0) {
......@@ -493,7 +500,7 @@ static int do_build(int ac, char const* const* av)
cmake cm(cmake::RoleInternal, cmState::Unknown);
cmSystemTools::SetMessageCallback(cmakemainMessageCallback, &cm);
cm.SetProgressCallback(cmakemainProgressCallback, &cm);
return cm.Build(jobs, dir, target, config, nativeOptions, clean);
return cm.Build(jobs, dir, target, config, nativeOptions, clean, verbose);
#endif
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment