ENH: modified GET_TARGET_PROPERTIES to work with all targets
This commit is contained in:
parent
490119d2aa
commit
26c53fe14c
|
@ -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 }}
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in New Issue