ENH: Refactor target output file type computation
This creates method cmTarget::GetOutputTargetType to compute the output file type 'ARCHIVE', 'LIBRARY', or 'RUNTIME' from the platform and target type. It factors out logic from the target output directory computation code for later re-use.
This commit is contained in:
parent
5f7ea11f97
commit
617eb981d4
|
@ -3166,6 +3166,62 @@ std::string cmTarget::GetInstallNameDirForInstallTree(const char* config,
|
|||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const char* cmTarget::GetOutputTargetType(bool implib)
|
||||
{
|
||||
switch(this->GetType())
|
||||
{
|
||||
case cmTarget::SHARED_LIBRARY:
|
||||
if(this->DLLPlatform)
|
||||
{
|
||||
if(implib)
|
||||
{
|
||||
// A DLL import library is treated as an archive target.
|
||||
return "ARCHIVE";
|
||||
}
|
||||
else
|
||||
{
|
||||
// A DLL shared library is treated as a runtime target.
|
||||
return "RUNTIME";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// For non-DLL platforms shared libraries are treated as
|
||||
// library targets.
|
||||
return "LIBRARY";
|
||||
}
|
||||
case cmTarget::STATIC_LIBRARY:
|
||||
// Static libraries are always treated as archive targets.
|
||||
return "ARCHIVE";
|
||||
case cmTarget::MODULE_LIBRARY:
|
||||
if(implib)
|
||||
{
|
||||
// Module libraries are always treated as library targets.
|
||||
return "ARCHIVE";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Module import libraries are treated as archive targets.
|
||||
return "LIBRARY";
|
||||
}
|
||||
case cmTarget::EXECUTABLE:
|
||||
if(implib)
|
||||
{
|
||||
// Executable import libraries are treated as archive targets.
|
||||
return "ARCHIVE";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Executables are always treated as runtime targets.
|
||||
return "RUNTIME";
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
std::string cmTarget::GetOutputDir(bool implib)
|
||||
{
|
||||
|
@ -3220,63 +3276,11 @@ std::string const& cmTarget::ComputeBaseOutputDir(bool implib)
|
|||
// Look for a target property defining the target output directory
|
||||
// based on the target type.
|
||||
const char* propertyName = 0;
|
||||
switch(this->GetType())
|
||||
std::string propertyNameStr = this->GetOutputTargetType(implib);
|
||||
if(!propertyNameStr.empty())
|
||||
{
|
||||
case cmTarget::SHARED_LIBRARY:
|
||||
{
|
||||
// For non-DLL platforms shared libraries are treated as
|
||||
// library targets. For DLL platforms the DLL part of a
|
||||
// shared library is treated as a runtime target and the
|
||||
// corresponding import library is treated as an archive
|
||||
// target.
|
||||
if(this->DLLPlatform)
|
||||
{
|
||||
if(implib)
|
||||
{
|
||||
propertyName = "ARCHIVE_OUTPUT_DIRECTORY";
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyName = "RUNTIME_OUTPUT_DIRECTORY";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyName = "LIBRARY_OUTPUT_DIRECTORY";
|
||||
}
|
||||
} break;
|
||||
case cmTarget::STATIC_LIBRARY:
|
||||
{
|
||||
// Static libraries are always treated as archive targets.
|
||||
propertyName = "ARCHIVE_OUTPUT_DIRECTORY";
|
||||
} break;
|
||||
case cmTarget::MODULE_LIBRARY:
|
||||
{
|
||||
// Module libraries are always treated as library targets.
|
||||
// Module import libraries are treated as archive targets.
|
||||
if(implib)
|
||||
{
|
||||
propertyName = "ARCHIVE_OUTPUT_DIRECTORY";
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyName = "LIBRARY_OUTPUT_DIRECTORY";
|
||||
}
|
||||
} break;
|
||||
case cmTarget::EXECUTABLE:
|
||||
{
|
||||
// Executables are always treated as runtime targets.
|
||||
// Executable import libraries are treated as archive targets.
|
||||
if(implib)
|
||||
{
|
||||
propertyName = "ARCHIVE_OUTPUT_DIRECTORY";
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyName = "RUNTIME_OUTPUT_DIRECTORY";
|
||||
}
|
||||
} break;
|
||||
default: break;
|
||||
propertyNameStr += "_OUTPUT_DIRECTORY";
|
||||
propertyName = propertyNameStr.c_str();
|
||||
}
|
||||
|
||||
// Select an output directory.
|
||||
|
|
|
@ -494,6 +494,9 @@ private:
|
|||
// If the variable is not defined use the given default instead.
|
||||
void SetPropertyDefault(const char* property, const char* default_value);
|
||||
|
||||
// Returns ARCHIVE, LIBRARY, or RUNTIME based on platform and type.
|
||||
const char* GetOutputTargetType(bool implib);
|
||||
|
||||
// Get the full path to the target output directory.
|
||||
std::string GetOutputDir(bool implib);
|
||||
std::string const& ComputeBaseOutputDir(bool implib);
|
||||
|
|
Loading…
Reference in New Issue