mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
ENH: Updated exporting and importing of targets to support libraries and configurations.
- Created cmExportFileGenerator hierarchy to implement export file generation - Installed exports use per-config import files loaded by a central one. - Include soname of shared libraries in import information - Renamed PREFIX to NAMESPACE in INSTALL(EXPORT) and EXPORT() commands - Move addition of CMAKE_INSTALL_PREFIX to destinations to install generators - Import files compute the installation prefix relative to their location when loaded - Add mapping of importer configurations to importee configurations - Rename IMPORT targets to IMPORTED targets to distinguish from windows import libraries - Scope IMPORTED targets within directories to isolate them - Place all properties created by import files in the IMPORTED namespace - Document INSTALL(EXPORT) and EXPORT() commands. - Document IMPORTED signature of add_executable and add_library - Enable finding of imported targets in cmComputeLinkDepends
This commit is contained in:
@@ -51,7 +51,7 @@ bool cmAddExecutableCommand
|
||||
++s;
|
||||
excludeFromAll = true;
|
||||
}
|
||||
else if(*s == "IMPORT")
|
||||
else if(*s == "IMPORTED")
|
||||
{
|
||||
++s;
|
||||
importTarget = true;
|
||||
@@ -61,12 +61,60 @@ bool cmAddExecutableCommand
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (importTarget)
|
||||
|
||||
// Special modifiers are not allowed with IMPORTED signature.
|
||||
if(importTarget && (use_win32 || use_macbundle || excludeFromAll))
|
||||
{
|
||||
this->Makefile->AddNewTarget(cmTarget::EXECUTABLE, exename.c_str(), true);
|
||||
if(use_win32)
|
||||
{
|
||||
this->SetError("may not be given WIN32 for an IMPORTED target.");
|
||||
}
|
||||
else if(use_macbundle)
|
||||
{
|
||||
this->SetError(
|
||||
"may not be given MACOSX_BUNDLE for an IMPORTED target.");
|
||||
}
|
||||
else // if(excludeFromAll)
|
||||
{
|
||||
this->SetError(
|
||||
"may not be given EXCLUDE_FROM_ALL for an IMPORTED target.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for an existing target with this name.
|
||||
cmTarget* existing = this->Makefile->FindTargetToUse(exename.c_str());
|
||||
if(importTarget)
|
||||
{
|
||||
// Make sure the target does not already exist.
|
||||
if(existing)
|
||||
{
|
||||
cmOStringStream e;
|
||||
e << "cannot create imported target \"" << exename
|
||||
<< "\" because another target with the same name already exists.";
|
||||
this->SetError(e.str().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create the imported target.
|
||||
this->Makefile->AddImportedTarget(exename.c_str(), cmTarget::EXECUTABLE);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Make sure the target does not conflict with an imported target.
|
||||
// This should really enforce global name uniqueness for targets
|
||||
// built within the project too, but that may break compatiblity
|
||||
// with projects in which it was accidentally working.
|
||||
if(existing && existing->IsImported())
|
||||
{
|
||||
cmOStringStream e;
|
||||
e << "cannot create target \"" << exename
|
||||
<< "\" because an imported target with the same name already exists.";
|
||||
this->SetError(e.str().c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (s == args.end())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user