ENH: modified GET_TARGET_PROPERTIES to work with all targets

This commit is contained in:
Ken Martin 2005-06-20 14:00:48 -04:00
parent 490119d2aa
commit 26c53fe14c
5 changed files with 58 additions and 84 deletions

View File

@ -1,32 +0,0 @@
{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f28\froman\fcharset238\fprq2 Times New Roman CE;}{\f29\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31\froman\fcharset161\fprq2 Times New Roman Greek;}{\f32\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f33\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f34\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f35\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f36\fswiss\fcharset238\fprq2 Arial CE;}{\f37\fswiss\fcharset204\fprq2 Arial Cyr;}
{\f39\fswiss\fcharset161\fprq2 Arial Greek;}{\f40\fswiss\fcharset162\fprq2 Arial Tur;}{\f41\fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f42\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f43\fswiss\fcharset186\fprq2 Arial Baltic;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}}{\info{\author deneb}{\operator deneb}{\creatim\yr2001\mo7\dy18\hr16\min33}{\revtim\yr2001\mo7\dy18\hr16\min39}{\version2}{\edmins6}
{\nofpages1}{\nofwords187}{\nofchars1067}{\*\company Dell Computer Corporation}{\nofcharsws1310}{\vern8269}}\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701
\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind4\viewscale100\nolnhtadjtbl \fet0\sectd \linex0\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3
\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}
{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain
\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f1\fs28 CMake Version 0.4
\par
\par }{\b\f1\fs20
\par This is the 0.6
beta release of CMake for Windows. This is still a beta release so no features or commands are fixed in stone. If you find bugs send them to kitware@kitware.com with a subject of CMake Bug. See http://public.kitware.com/CMake for additional information.
\par
\par Changes from 0.4 to 0.6
\par
\par Library search paths now only look to .lib on Windows and .so .sl for UNIX. CMakeLists files now supports escape sequences. Better testing support. Depend checks expand variables. AUX_SOURCE_DIRECTORY no longer adds all files
, but looks at the source extension. Added CMAKE_COMPILER_IS_GNUCXX variable. Mac OSX support. Make sure Cache is cleared in the GUI.
\par
\par Changes from 0.2 to 0.4
\par
\par A number of fixes to support different UNIX compilers, better error reporting for the TARGET_LINK_LIBRARY command when a bad target is specified, when searching for programs CMake will no longer mistake a directory
for a program, a resizing bug was fixed when CMake was minimized, the ADD_LIBRARY command now supports an optional argument that can specify if a library can only be built as static (or shared, or either).
\par
\par Changes from 0.1 to 0.2
\par
\par This release has a large number of changes, new features and bug fixes. Unlike version 0.1 the commands in this version are fairly stable. }{\f1\fs20
\par }}

View File

@ -27,55 +27,17 @@ bool cmGetTargetPropertyCommand::InitialPass(
}
const char* var = args[0].c_str();
const char* targetName = args[1].c_str();
cmTargets& targets = m_Makefile->GetTargets();
cmTargets::iterator i = targets.find(targetName);
if ( i != targets.end())
{
cmTarget& target = i->second;
if ( args[2] == "LOCATION" )
{
std::string target_location;
switch( target.GetType() )
{
case cmTarget::STATIC_LIBRARY:
case cmTarget::MODULE_LIBRARY:
case cmTarget::SHARED_LIBRARY:
target_location = m_Makefile->GetSafeDefinition("LIBRARY_OUTPUT_PATH");
break;
case cmTarget::EXECUTABLE:
target_location = m_Makefile->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH");
break;
default:
m_Makefile->AddDefinition(var, "NOTFOUND");
return true;
}
if ( target_location.size() == 0 )
{
target_location += m_Makefile->GetCurrentOutputDirectory();
}
if ( target_location.size() > 0 )
{
target_location += "/";
}
const char* cfgid = m_Makefile->GetDefinition("CMAKE_CFG_INTDIR");
if ( cfgid && strcmp(cfgid, ".") != 0 )
{
target_location += cfgid;
target_location += "/";
}
target_location += target.GetFullName(m_Makefile);
m_Makefile->AddDefinition(var, target_location.c_str());
return true;
}
else
cmTarget *tgt = m_Makefile->GetLocalGenerator()->GetGlobalGenerator()
->FindTarget(0,targetName);
if (tgt)
{
cmTarget& target = *tgt;
const char *prop = target.GetProperty(args[2].c_str());
if (prop)
{
const char *prop = target.GetProperty(args[2].c_str());
if (prop)
{
m_Makefile->AddDefinition(var, prop);
return true;
}
m_Makefile->AddDefinition(var, prop);
return true;
}
}
m_Makefile->AddDefinition(var, "NOTFOUND");

View File

@ -60,7 +60,9 @@ public:
"a target is built. The read-only property \"LOCATION\" specifies "
"the full path to the file on disk that will be created for the "
"target. This is very useful for executable targets to get "
"the path to the executable file for use in a custom command.";
"the path to the executable file for use in a custom command. "
"This command can get properties for any target so far created. "
"The targets do not need to be in the current CMakeLists.txt file.";
}
cmTypeMacro(cmGetTargetPropertyCommand, cmCommand);

View File

@ -143,6 +143,9 @@ public:
*/
void FindMakeProgram(cmMakefile*);
///! Find a target by name by searching the local generators.
cmTarget* FindTarget(const char* project, const char* name);
protected:
// Fill the m_ProjectMap, this must be called after m_LocalGenerators has been populated.
void FillProjectMap();
@ -159,8 +162,6 @@ protected:
// map from project name to vector of local generators in that project
std::map<cmStdString, std::vector<cmLocalGenerator*> > m_ProjectMap;
///! Find a target by name by searching the local generators.
cmTarget* FindTarget(const char* project, const char* name);
private:
// If you add a new map here, make sure it is copied
// in EnableLanguagesFromGenerator

View File

@ -1079,7 +1079,8 @@ void cmMakefile::AddLibrary(const char* lname, int shared,
target.SetInAll(true);
target.GetSourceLists() = srcs;
this->AddGlobalLinkInformation(lname, target);
m_Targets.insert(cmTargets::value_type(lname,target));
cmTargets::iterator it =
m_Targets.insert(cmTargets::value_type(lname,target)).first;
// Add an entry into the cache
std::string libPath = lname;
@ -1088,7 +1089,27 @@ void cmMakefile::AddLibrary(const char* lname, int shared,
AddCacheEntry(libPath.c_str(),
this->GetCurrentOutputDirectory(),
"Path to a library", cmCacheManager::INTERNAL);
// set the LOCATION property of the target
std::string target_location;
target_location = this->GetSafeDefinition("LIBRARY_OUTPUT_PATH");
if ( target_location.size() == 0 )
{
target_location += this->GetCurrentOutputDirectory();
}
if ( target_location.size() > 0 )
{
target_location += "/";
}
const char* cfgid = this->GetDefinition("CMAKE_CFG_INTDIR");
if ( cfgid && strcmp(cfgid, ".") != 0 )
{
target_location += cfgid;
target_location += "/";
}
target_location += target.GetFullName(this);
target.SetProperty("LOCATION",target_location.c_str());
// Add an entry into the cache
std::string ltname = lname;
ltname += "_LIBRARY_TYPE";
@ -1133,6 +1154,26 @@ cmTarget* cmMakefile::AddExecutable(const char *exeName,
cmTargets::iterator it =
m_Targets.insert(cmTargets::value_type(exeName,target)).first;
// set the LOCATION property of the target
std::string target_location;
target_location = this->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH");
if ( target_location.size() == 0 )
{
target_location += this->GetCurrentOutputDirectory();
}
if ( target_location.size() > 0 )
{
target_location += "/";
}
const char* cfgid = this->GetDefinition("CMAKE_CFG_INTDIR");
if ( cfgid && strcmp(cfgid, ".") != 0 )
{
target_location += cfgid;
target_location += "/";
}
target_location += target.GetFullName(this);
it->second.SetProperty("LOCATION",target_location.c_str());
// Add an entry into the cache
std::string exePath = exeName;
exePath += "_CMAKE_PATH";