CodeBlocks: generate parallel project files (make -j)
This is done the same way as for Eclipse: cmake tries to determine the number of CPUs, and then adds the respective -jN to the make invocations in the project file. Alex
This commit is contained in:
parent
7a45d91dc4
commit
84ccd4f746
|
@ -23,3 +23,18 @@ endif()
|
|||
|
||||
# Determine builtin macros and include dirs:
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake)
|
||||
|
||||
# Try to find out how many CPUs we have and set the -j argument for make accordingly
|
||||
set(_CMAKE_CODEBLOCKS_INITIAL_MAKE_ARGS "")
|
||||
|
||||
include(ProcessorCount)
|
||||
processorcount(_CMAKE_CODEBLOCKS_PROCESSOR_COUNT)
|
||||
|
||||
# Only set -j if we are under UNIX and if the make-tool used actually has "make" in the name
|
||||
# (we may also get here in the future e.g. for ninja)
|
||||
if("${_CMAKE_CODEBLOCKS_PROCESSOR_COUNT}" GREATER 1 AND CMAKE_HOST_UNIX AND "${CMAKE_MAKE_PROGRAM}" MATCHES make)
|
||||
set(_CMAKE_CODEBLOCKS_INITIAL_MAKE_ARGS "-j${_CMAKE_CODEBLOCKS_PROCESSOR_COUNT}")
|
||||
endif()
|
||||
|
||||
# This variable is used by the CodeBlocks generator and appended to the make invocation commands.
|
||||
set(CMAKE_CODEBLOCKS_MAKE_ARGUMENTS "${_CMAKE_CODEBLOCKS_INITIAL_MAKE_ARGS}" CACHE STRING "Additional command line arguments when CodeBlocks invokes make. Enter e.g. -j<some_number> to get parallel builds")
|
||||
|
|
|
@ -300,6 +300,8 @@ void cmExtraCodeBlocksGenerator
|
|||
// figure out the compiler
|
||||
std::string compiler = this->GetCBCompilerId(mf);
|
||||
std::string make = mf->GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
|
||||
const std::string makeArgs = mf->GetSafeDefinition(
|
||||
"CMAKE_CODEBLOCKS_MAKE_ARGUMENTS");
|
||||
|
||||
fout<<"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n"
|
||||
"<CodeBlocks_project_file>\n"
|
||||
|
@ -311,7 +313,8 @@ void cmExtraCodeBlocksGenerator
|
|||
" "<<virtualFolders<<"\n"
|
||||
" <Build>\n";
|
||||
|
||||
this->AppendTarget(fout, "all", 0, make.c_str(), lgs[0], compiler.c_str());
|
||||
this->AppendTarget(fout, "all", 0, make.c_str(), lgs[0], compiler.c_str(),
|
||||
makeArgs);
|
||||
|
||||
// add all executable and library targets and some of the GLOBAL
|
||||
// and UTILITY targets
|
||||
|
@ -333,7 +336,8 @@ void cmExtraCodeBlocksGenerator
|
|||
(*lg)->GetBinaryDirectory())==0)
|
||||
{
|
||||
this->AppendTarget(fout, targetName, 0,
|
||||
make.c_str(), *lg, compiler.c_str());
|
||||
make.c_str(), *lg, compiler.c_str(),
|
||||
makeArgs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -350,7 +354,7 @@ void cmExtraCodeBlocksGenerator
|
|||
}
|
||||
|
||||
this->AppendTarget(fout, targetName, 0,
|
||||
make.c_str(), *lg, compiler.c_str());
|
||||
make.c_str(), *lg, compiler.c_str(),makeArgs);
|
||||
break;
|
||||
case cmState::EXECUTABLE:
|
||||
case cmState::STATIC_LIBRARY:
|
||||
|
@ -360,11 +364,11 @@ void cmExtraCodeBlocksGenerator
|
|||
{
|
||||
cmGeneratorTarget* gt = *ti;
|
||||
this->AppendTarget(fout, targetName, gt,
|
||||
make.c_str(), *lg, compiler.c_str());
|
||||
make.c_str(), *lg, compiler.c_str(), makeArgs);
|
||||
std::string fastTarget = targetName;
|
||||
fastTarget += "/fast";
|
||||
this->AppendTarget(fout, fastTarget, gt,
|
||||
make.c_str(), *lg, compiler.c_str());
|
||||
make.c_str(), *lg, compiler.c_str(), makeArgs);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -555,7 +559,8 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
|
|||
cmGeneratorTarget* target,
|
||||
const char* make,
|
||||
const cmLocalGenerator* lg,
|
||||
const char* compiler)
|
||||
const char* compiler,
|
||||
const std::string& makeFlags)
|
||||
{
|
||||
cmMakefile const* makefile = lg->GetMakefile();
|
||||
std::string makefileName = lg->GetCurrentBinaryDirectory();
|
||||
|
@ -663,16 +668,18 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
|
|||
|
||||
fout<<" <MakeCommands>\n"
|
||||
" <Build command=\""
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(), targetName)
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(), targetName,
|
||||
makeFlags)
|
||||
<< "\" />\n"
|
||||
" <CompileFile command=\""
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(),""$file"")
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(),""$file"",
|
||||
makeFlags)
|
||||
<< "\" />\n"
|
||||
" <Clean command=\""
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean")
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean", makeFlags)
|
||||
<< "\" />\n"
|
||||
" <DistClean command=\""
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean")
|
||||
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean", makeFlags)
|
||||
<< "\" />\n"
|
||||
" </MakeCommands>\n"
|
||||
" </Target>\n";
|
||||
|
@ -753,9 +760,15 @@ int cmExtraCodeBlocksGenerator::GetCBTargetType(cmGeneratorTarget* target)
|
|||
// make
|
||||
std::string cmExtraCodeBlocksGenerator::BuildMakeCommand(
|
||||
const std::string& make, const char* makefile,
|
||||
const std::string& target)
|
||||
const std::string& target, const std::string& makeFlags)
|
||||
{
|
||||
std::string command = make;
|
||||
if (makeFlags.size() > 0)
|
||||
{
|
||||
command += " ";
|
||||
command += makeFlags;
|
||||
}
|
||||
|
||||
std::string generator = this->GlobalGenerator->GetName();
|
||||
if (generator == "NMake Makefiles")
|
||||
{
|
||||
|
|
|
@ -54,13 +54,16 @@ private:
|
|||
std::string GetCBCompilerId(const cmMakefile* mf);
|
||||
int GetCBTargetType(cmGeneratorTarget* target);
|
||||
std::string BuildMakeCommand(const std::string& make, const char* makefile,
|
||||
const std::string& target);
|
||||
const std::string& target,
|
||||
const std::string& makeFlags);
|
||||
void AppendTarget(cmGeneratedFileStream& fout,
|
||||
const std::string& targetName,
|
||||
cmGeneratorTarget* target,
|
||||
const char* make,
|
||||
const cmLocalGenerator* lg,
|
||||
const char* compiler);
|
||||
const char* compiler,
|
||||
const std::string& makeFlags
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue