Merge topic 'OBJECTLibrariesInCodeBlocks'
38d4c1e
CodeBlocks: improve support for OBJECT librariesd2ed3c7
-fix #13081: support OBJECT libraries in CodeBlocks/QtCreator projects
This commit is contained in:
commit
81e696c99d
|
@ -386,6 +386,7 @@ void cmExtraCodeBlocksGenerator
|
|||
case cmTarget::STATIC_LIBRARY:
|
||||
case cmTarget::SHARED_LIBRARY:
|
||||
case cmTarget::MODULE_LIBRARY:
|
||||
case cmTarget::OBJECT_LIBRARY:
|
||||
{
|
||||
this->AppendTarget(fout, ti->first.c_str(), &ti->second,
|
||||
make.c_str(), makefile, compiler.c_str());
|
||||
|
@ -423,6 +424,7 @@ void cmExtraCodeBlocksGenerator
|
|||
case cmTarget::STATIC_LIBRARY:
|
||||
case cmTarget::SHARED_LIBRARY:
|
||||
case cmTarget::MODULE_LIBRARY:
|
||||
case cmTarget::OBJECT_LIBRARY:
|
||||
case cmTarget::UTILITY: // can have sources since 2.6.3
|
||||
{
|
||||
const std::vector<cmSourceFile*>&sources=ti->second.GetSourceFiles();
|
||||
|
@ -535,6 +537,31 @@ void cmExtraCodeBlocksGenerator
|
|||
}
|
||||
|
||||
|
||||
// Write a dummy file for OBJECT libraries, so C::B can reference some file
|
||||
std::string cmExtraCodeBlocksGenerator::CreateDummyTargetFile(
|
||||
cmMakefile* mf, cmTarget* target) const
|
||||
{
|
||||
// this file doesn't seem to be used by C::B in custom makefile mode,
|
||||
// but we generate a unique file for each OBJECT library so in case
|
||||
// C::B uses it in some way, the targets don't interfere with each other.
|
||||
std::string filename = mf->GetCurrentOutputDirectory();
|
||||
filename += "/";
|
||||
filename += mf->GetLocalGenerator()->GetTargetDirectory(*target);
|
||||
filename += "/";
|
||||
filename += target->GetName();
|
||||
filename += ".objlib";
|
||||
cmGeneratedFileStream fout(filename.c_str());
|
||||
if(fout)
|
||||
{
|
||||
fout << "# This is a dummy file for the OBJECT library "
|
||||
<< target->GetName()
|
||||
<< " for the CMake CodeBlocks project generator.\n"
|
||||
<< "# Don't edit, this file will be overwritten.\n";
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
|
||||
|
||||
// Generate the xml code for one target.
|
||||
void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
|
||||
const char* targetName,
|
||||
|
@ -573,7 +600,18 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
|
|||
}
|
||||
|
||||
const char* buildType = makefile->GetDefinition("CMAKE_BUILD_TYPE");
|
||||
fout<<" <Option output=\"" << target->GetLocation(buildType)
|
||||
std::string location;
|
||||
if ( target->GetType()==cmTarget::OBJECT_LIBRARY)
|
||||
{
|
||||
location = this->CreateDummyTargetFile(const_cast<cmMakefile*>(makefile),
|
||||
target);
|
||||
}
|
||||
else
|
||||
{
|
||||
location = target->GetLocation(buildType);
|
||||
}
|
||||
|
||||
fout<<" <Option output=\"" << location
|
||||
<< "\" prefix_auto=\"0\" extension_auto=\"0\" />\n"
|
||||
" <Option working_dir=\"" << workingDir << "\" />\n"
|
||||
" <Option object_output=\"./\" />\n"
|
||||
|
@ -731,7 +769,8 @@ int cmExtraCodeBlocksGenerator::GetCBTargetType(cmTarget* target)
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
else if ( target->GetType()==cmTarget::STATIC_LIBRARY)
|
||||
else if (( target->GetType()==cmTarget::STATIC_LIBRARY)
|
||||
|| (target->GetType()==cmTarget::OBJECT_LIBRARY))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,8 @@ private:
|
|||
|
||||
void CreateNewProjectFile(const std::vector<cmLocalGenerator*>& lgs,
|
||||
const std::string& filename);
|
||||
std::string CreateDummyTargetFile(cmMakefile* mf, cmTarget* target) const;
|
||||
|
||||
std::string GetCBCompilerId(const cmMakefile* mf);
|
||||
int GetCBTargetType(cmTarget* target);
|
||||
std::string BuildMakeCommand(const std::string& make, const char* makefile,
|
||||
|
|
Loading…
Reference in New Issue