mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 21:31:08 -06:00
Ninja Multi-Config: Use build.ninja if cmake --build has no --config
If cmake --build is called with no --config argument, and a build.ninja file is available, use that instead of defaulting to the Debug config.
This commit is contained in:
@@ -800,8 +800,7 @@ cmGlobalNinjaGenerator::GenerateBuildCommand(
|
|||||||
makeCommand.Add("-j", std::to_string(jobs));
|
makeCommand.Add("-j", std::to_string(jobs));
|
||||||
}
|
}
|
||||||
|
|
||||||
this->AppendNinjaFileArgument(makeCommand,
|
this->AppendNinjaFileArgument(makeCommand, config);
|
||||||
config.empty() ? "Debug" : config);
|
|
||||||
|
|
||||||
makeCommand.Add(makeOptions.begin(), makeOptions.end());
|
makeCommand.Add(makeOptions.begin(), makeOptions.end());
|
||||||
for (const auto& tname : targetNames) {
|
for (const auto& tname : targetNames) {
|
||||||
@@ -2559,8 +2558,10 @@ void cmGlobalNinjaMultiGenerator::CloseBuildFileStreams()
|
|||||||
void cmGlobalNinjaMultiGenerator::AppendNinjaFileArgument(
|
void cmGlobalNinjaMultiGenerator::AppendNinjaFileArgument(
|
||||||
GeneratedMakeCommand& command, const std::string& config) const
|
GeneratedMakeCommand& command, const std::string& config) const
|
||||||
{
|
{
|
||||||
command.Add("-f");
|
if (!config.empty()) {
|
||||||
command.Add(GetNinjaConfigFilename(config));
|
command.Add("-f");
|
||||||
|
command.Add(GetNinjaConfigFilename(config));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string cmGlobalNinjaMultiGenerator::GetNinjaImplFilename(
|
std::string cmGlobalNinjaMultiGenerator::GetNinjaImplFilename(
|
||||||
@@ -2601,11 +2602,30 @@ void cmGlobalNinjaMultiGenerator::GetQtAutoGenConfigs(
|
|||||||
|
|
||||||
bool cmGlobalNinjaMultiGenerator::InspectConfigTypeVariables()
|
bool cmGlobalNinjaMultiGenerator::InspectConfigTypeVariables()
|
||||||
{
|
{
|
||||||
auto configsVec = this->Makefiles.front()->GetGeneratorConfigs();
|
return this->ReadCacheEntriesForBuild(*this->Makefiles.front()->GetState());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string cmGlobalNinjaMultiGenerator::GetDefaultBuildConfig() const
|
||||||
|
{
|
||||||
|
if (this->DefaultFileConfig.empty()) {
|
||||||
|
return "Debug";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmGlobalNinjaMultiGenerator::ReadCacheEntriesForBuild(
|
||||||
|
const cmState& state)
|
||||||
|
{
|
||||||
|
std::vector<std::string> configsVec;
|
||||||
|
cmExpandList(state.GetSafeCacheEntryValue("CMAKE_CONFIGURATION_TYPES"),
|
||||||
|
configsVec);
|
||||||
|
if (configsVec.empty()) {
|
||||||
|
configsVec.emplace_back();
|
||||||
|
}
|
||||||
std::set<std::string> configs(configsVec.cbegin(), configsVec.cend());
|
std::set<std::string> configs(configsVec.cbegin(), configsVec.cend());
|
||||||
|
|
||||||
this->DefaultFileConfig = this->Makefiles.front()->GetSafeDefinition(
|
this->DefaultFileConfig =
|
||||||
"CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG");
|
state.GetSafeCacheEntryValue("CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG");
|
||||||
if (!this->DefaultFileConfig.empty() &&
|
if (!this->DefaultFileConfig.empty() &&
|
||||||
!configs.count(this->DefaultFileConfig)) {
|
!configs.count(this->DefaultFileConfig)) {
|
||||||
std::ostringstream msg;
|
std::ostringstream msg;
|
||||||
@@ -2618,9 +2638,8 @@ bool cmGlobalNinjaMultiGenerator::InspectConfigTypeVariables()
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> crossConfigsVec;
|
std::vector<std::string> crossConfigsVec;
|
||||||
cmExpandList(
|
cmExpandList(state.GetSafeCacheEntryValue("CMAKE_NMC_CROSS_CONFIGS"),
|
||||||
this->Makefiles.front()->GetSafeDefinition("CMAKE_NMC_CROSS_CONFIGS"),
|
crossConfigsVec);
|
||||||
crossConfigsVec);
|
|
||||||
auto crossConfigs = ListSubsetWithAll(configs, crossConfigsVec);
|
auto crossConfigs = ListSubsetWithAll(configs, crossConfigsVec);
|
||||||
if (!crossConfigs) {
|
if (!crossConfigs) {
|
||||||
std::ostringstream msg;
|
std::ostringstream msg;
|
||||||
@@ -2633,7 +2652,7 @@ bool cmGlobalNinjaMultiGenerator::InspectConfigTypeVariables()
|
|||||||
this->CrossConfigs = *crossConfigs;
|
this->CrossConfigs = *crossConfigs;
|
||||||
|
|
||||||
auto defaultConfigsString =
|
auto defaultConfigsString =
|
||||||
this->Makefiles.front()->GetSafeDefinition("CMAKE_NMC_DEFAULT_CONFIGS");
|
state.GetSafeCacheEntryValue("CMAKE_NMC_DEFAULT_CONFIGS");
|
||||||
if (defaultConfigsString.empty()) {
|
if (defaultConfigsString.empty()) {
|
||||||
defaultConfigsString = this->DefaultFileConfig;
|
defaultConfigsString = this->DefaultFileConfig;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class cmLinkLineComputer;
|
|||||||
class cmLocalGenerator;
|
class cmLocalGenerator;
|
||||||
class cmMakefile;
|
class cmMakefile;
|
||||||
class cmOutputConverter;
|
class cmOutputConverter;
|
||||||
|
class cmState;
|
||||||
class cmStateDirectory;
|
class cmStateDirectory;
|
||||||
class cmake;
|
class cmake;
|
||||||
struct cmDocumentationEntry;
|
struct cmDocumentationEntry;
|
||||||
@@ -633,6 +634,10 @@ public:
|
|||||||
|
|
||||||
bool InspectConfigTypeVariables() override;
|
bool InspectConfigTypeVariables() override;
|
||||||
|
|
||||||
|
std::string GetDefaultBuildConfig() const override;
|
||||||
|
|
||||||
|
bool ReadCacheEntriesForBuild(const cmState& state) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool OpenBuildFileStreams() override;
|
bool OpenBuildFileStreams() override;
|
||||||
void CloseBuildFileStreams() override;
|
void CloseBuildFileStreams() override;
|
||||||
|
|||||||
@@ -141,6 +141,16 @@ const char* cmState::GetCacheEntryValue(std::string const& key) const
|
|||||||
return e->Value.c_str();
|
return e->Value.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string cmState::GetSafeCacheEntryValue(std::string const& key) const
|
||||||
|
{
|
||||||
|
std::string retval;
|
||||||
|
auto val = this->GetCacheEntryValue(key);
|
||||||
|
if (val) {
|
||||||
|
retval = val;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string* cmState::GetInitializedCacheValue(
|
const std::string* cmState::GetInitializedCacheValue(
|
||||||
std::string const& key) const
|
std::string const& key) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ public:
|
|||||||
|
|
||||||
std::vector<std::string> GetCacheEntryKeys() const;
|
std::vector<std::string> GetCacheEntryKeys() const;
|
||||||
const char* GetCacheEntryValue(std::string const& key) const;
|
const char* GetCacheEntryValue(std::string const& key) const;
|
||||||
|
std::string GetSafeCacheEntryValue(std::string const& key) const;
|
||||||
const std::string* GetInitializedCacheValue(std::string const& key) const;
|
const std::string* GetInitializedCacheValue(std::string const& key) const;
|
||||||
cmStateEnums::CacheEntryType GetCacheEntryType(std::string const& key) const;
|
cmStateEnums::CacheEntryType GetCacheEntryType(std::string const& key) const;
|
||||||
void SetCacheEntryValue(std::string const& key, std::string const& value);
|
void SetCacheEntryValue(std::string const& key, std::string const& value);
|
||||||
|
|||||||
@@ -62,7 +62,12 @@ function(run_cmake_build case suffix config)
|
|||||||
foreach(tgt IN LISTS ARGN)
|
foreach(tgt IN LISTS ARGN)
|
||||||
list(APPEND tgts --target ${tgt})
|
list(APPEND tgts --target ${tgt})
|
||||||
endforeach()
|
endforeach()
|
||||||
run_cmake_command(${case}-${suffix}-build "${CMAKE_COMMAND}" --build . --config ${config} ${tgts})
|
if(config)
|
||||||
|
set(config_arg --config ${config})
|
||||||
|
else()
|
||||||
|
set(config_arg)
|
||||||
|
endif()
|
||||||
|
run_cmake_command(${case}-${suffix}-build "${CMAKE_COMMAND}" --build . ${config_arg} ${tgts})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(run_ninja case suffix file)
|
function(run_ninja case suffix file)
|
||||||
@@ -122,7 +127,8 @@ run_cmake_configure(SimpleDefaultBuildAliasList)
|
|||||||
unset(RunCMake_TEST_OPTIONS)
|
unset(RunCMake_TEST_OPTIONS)
|
||||||
include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
|
include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
|
||||||
run_ninja(SimpleDefaultBuildAliasList target-configs build.ninja simpleexe)
|
run_ninja(SimpleDefaultBuildAliasList target-configs build.ninja simpleexe)
|
||||||
run_ninja(SimpleDefaultBuildAliasList all-configs build.ninja all)
|
# IMPORTANT: This tests cmake --build . with no config using build.ninja
|
||||||
|
run_cmake_build(SimpleDefaultBuildAliasList all-configs "" all)
|
||||||
run_ninja(SimpleDefaultBuildAliasList all-relwithdebinfo build.ninja all:RelWithDebInfo)
|
run_ninja(SimpleDefaultBuildAliasList all-relwithdebinfo build.ninja all:RelWithDebInfo)
|
||||||
run_ninja(SimpleDefaultBuildAliasList clean-configs build.ninja clean)
|
run_ninja(SimpleDefaultBuildAliasList clean-configs build.ninja clean)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user