Make the SOURCES target property writable.
This commit is contained in:
parent
6e636f2eba
commit
81ad69e056
|
@ -3,5 +3,4 @@ SOURCES
|
||||||
|
|
||||||
Source names specified for a target.
|
Source names specified for a target.
|
||||||
|
|
||||||
Read-only list of sources specified for a target. The names returned
|
List of sources specified for a target.
|
||||||
are suitable for passing to the set_source_files_properties command.
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
target-SOURCES-write.rst
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
* It is now possible to write and append to the :prop_tgt:`SOURCES` target
|
||||||
|
property. The :variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable may be
|
||||||
|
used to trace the origin of sources.
|
|
@ -1697,6 +1697,25 @@ void cmTarget::SetProperty(const std::string& prop, const char* value)
|
||||||
this->Internal->LinkImplementationPropertyEntries.push_back(entry);
|
this->Internal->LinkImplementationPropertyEntries.push_back(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (prop == "SOURCES")
|
||||||
|
{
|
||||||
|
if(this->IsImported())
|
||||||
|
{
|
||||||
|
cmOStringStream e;
|
||||||
|
e << "SOURCES property can't be set on imported targets (\""
|
||||||
|
<< this->Name << "\")\n";
|
||||||
|
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cmListFileBacktrace lfbt;
|
||||||
|
this->Makefile->GetBacktrace(lfbt);
|
||||||
|
cmGeneratorExpression ge(lfbt);
|
||||||
|
this->Internal->SourceEntries.clear();
|
||||||
|
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(value);
|
||||||
|
this->Internal->SourceEntries.push_back(
|
||||||
|
new cmTargetInternals::TargetPropertyEntry(cge));
|
||||||
|
return;
|
||||||
|
}
|
||||||
this->Properties.SetProperty(prop, value, cmProperty::TARGET);
|
this->Properties.SetProperty(prop, value, cmProperty::TARGET);
|
||||||
this->MaybeInvalidatePropertyCache(prop);
|
this->MaybeInvalidatePropertyCache(prop);
|
||||||
}
|
}
|
||||||
|
@ -1764,6 +1783,25 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value,
|
||||||
this->Internal->LinkImplementationPropertyEntries.push_back(entry);
|
this->Internal->LinkImplementationPropertyEntries.push_back(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (prop == "SOURCES")
|
||||||
|
{
|
||||||
|
if(this->IsImported())
|
||||||
|
{
|
||||||
|
cmOStringStream e;
|
||||||
|
e << "SOURCES property can't be set on imported targets (\""
|
||||||
|
<< this->Name << "\")\n";
|
||||||
|
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmListFileBacktrace lfbt;
|
||||||
|
this->Makefile->GetBacktrace(lfbt);
|
||||||
|
cmGeneratorExpression ge(lfbt);
|
||||||
|
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(value);
|
||||||
|
this->Internal->SourceEntries.push_back(
|
||||||
|
new cmTargetInternals::TargetPropertyEntry(cge));
|
||||||
|
return;
|
||||||
|
}
|
||||||
this->Properties.AppendProperty(prop, value, cmProperty::TARGET, asString);
|
this->Properties.AppendProperty(prop, value, cmProperty::TARGET, asString);
|
||||||
this->MaybeInvalidatePropertyCache(prop);
|
this->MaybeInvalidatePropertyCache(prop);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,14 @@ CMake Debug Log at OriginDebug.cmake:13 \(add_library\):
|
||||||
|
|
||||||
\* .*Tests/RunCMake/TargetSources/empty_2.cpp
|
\* .*Tests/RunCMake/TargetSources/empty_2.cpp
|
||||||
|
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists.txt:3 \(include\)
|
||||||
|
+
|
||||||
|
CMake Debug Log at OriginDebug.cmake:16 \(set_property\):
|
||||||
|
Used sources for target OriginDebug:
|
||||||
|
|
||||||
|
\* .*Tests/RunCMake/TargetSources/empty_3.cpp
|
||||||
|
|
||||||
Call Stack \(most recent call first\):
|
Call Stack \(most recent call first\):
|
||||||
CMakeLists.txt:3 \(include\)
|
CMakeLists.txt:3 \(include\)
|
||||||
+
|
+
|
||||||
|
|
|
@ -12,3 +12,7 @@ set_property(TARGET iface PROPERTY INTERFACE_SOURCES
|
||||||
|
|
||||||
add_library(OriginDebug empty_2.cpp)
|
add_library(OriginDebug empty_2.cpp)
|
||||||
target_link_libraries(OriginDebug iface)
|
target_link_libraries(OriginDebug iface)
|
||||||
|
|
||||||
|
set_property(TARGET OriginDebug APPEND PROPERTY SOURCES
|
||||||
|
empty_3.cpp
|
||||||
|
)
|
||||||
|
|
|
@ -3,6 +3,15 @@ CMake Debug Log at OriginDebug.cmake:13 \(add_library\):
|
||||||
|
|
||||||
\* .*Tests/RunCMake/TargetSources/empty_2.cpp
|
\* .*Tests/RunCMake/TargetSources/empty_2.cpp
|
||||||
|
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
OriginDebugIDE.cmake:4 \(include\)
|
||||||
|
CMakeLists.txt:3 \(include\)
|
||||||
|
+
|
||||||
|
CMake Debug Log at OriginDebug.cmake:16 \(set_property\):
|
||||||
|
Used sources for target OriginDebug:
|
||||||
|
|
||||||
|
\* .*Tests/RunCMake/TargetSources/empty_3.cpp
|
||||||
|
|
||||||
Call Stack \(most recent call first\):
|
Call Stack \(most recent call first\):
|
||||||
OriginDebugIDE.cmake:4 \(include\)
|
OriginDebugIDE.cmake:4 \(include\)
|
||||||
CMakeLists.txt:3 \(include\)
|
CMakeLists.txt:3 \(include\)
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifdef _WIN32
|
||||||
|
__declspec(dllexport)
|
||||||
|
#endif
|
||||||
|
int empty()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -8,3 +8,5 @@ set_property(TARGET iface PROPERTY INTERFACE_SOURCES iface.cpp)
|
||||||
|
|
||||||
add_executable(SourcesProperty main.cpp)
|
add_executable(SourcesProperty main.cpp)
|
||||||
target_link_libraries(SourcesProperty iface)
|
target_link_libraries(SourcesProperty iface)
|
||||||
|
|
||||||
|
set_property(TARGET SourcesProperty APPEND PROPERTY SOURCES prop.cpp)
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
|
|
||||||
int iface();
|
int iface();
|
||||||
|
|
||||||
|
int prop();
|
||||||
|
|
|
@ -3,5 +3,5 @@
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
return iface();
|
return iface() + prop();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
int prop()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue