Browse Source

Add generator expression support to OUTPUT_NAME target property

pull/166/head
Robert Goulet 10 years ago
committed by Brad King
parent
commit
809159c9b7
  1. 3
      Help/prop_tgt/OUTPUT_NAME.rst
  2. 5
      Help/release/dev/OUTPUT_NAME-genex.rst
  3. 16
      Source/cmTarget.cxx
  4. 10
      Tests/ExportImport/Export/CMakeLists.txt
  5. 1
      Tests/ExportImport/Export/testLib7.c
  6. 2
      Tests/ExportImport/Import/A/CMakeLists.txt
  7. 3
      Tests/ExportImport/Import/A/imp_testExe1.c

3
Help/prop_tgt/OUTPUT_NAME.rst

@ -7,6 +7,9 @@ This sets the base name for output files created for an executable or
library target. If not set, the logical target name is used by
default.
Contents of ``OUTPUT_NAME`` and the variants listed below may use
:manual:`generator expressions <cmake-generator-expressions(7)>`.
See also the variants:
* :prop_tgt:`OUTPUT_NAME_<CONFIG>`

5
Help/release/dev/OUTPUT_NAME-genex.rst

@ -0,0 +1,5 @@
OUTPUT_NAME-genex
-----------------
* The :prop_tgt:`OUTPUT_NAME` target property and its variants learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.

16
Source/cmTarget.cxx

@ -4597,15 +4597,25 @@ std::string cmTarget::GetOutputName(const std::string& config,
// OUTPUT_NAME
props.push_back("OUTPUT_NAME");
std::string outName;
for(std::vector<std::string>::const_iterator i = props.begin();
i != props.end(); ++i)
{
if(const char* outName = this->GetProperty(*i))
if (const char* outNameProp = this->GetProperty(*i))
{
return outName;
outName = outNameProp;
break;
}
}
return this->GetName();
if (outName.empty())
{
outName = this->GetName();
}
cmGeneratorExpression ge;
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(outName);
return cge->Evaluate(this->Makefile, config);
}
//----------------------------------------------------------------------------

10
Tests/ExportImport/Export/CMakeLists.txt

@ -73,6 +73,12 @@ install(TARGETS testLibPerConfigDest EXPORT exp
DESTINATION lib/$<$<BOOL:$<CONFIG>>:$<CONFIG>>$<$<NOT:$<BOOL:$<CONFIG>>>:NoConfig>
)
# Test OUTPUT_NAME properties with generator expressions
add_library(testLib7 STATIC testLib7.c)
set_property(TARGET testLib7 PROPERTY OUTPUT_NAME_DEBUG testLib7D-$<CONFIG>)
set_property(TARGET testLib7 PROPERTY OUTPUT_NAME_RELEASE testLib7R-$<CONFIG>)
set_property(TARGET testLib7 PROPERTY OUTPUT_NAME testLib7-$<CONFIG>)
# Work-around: Visual Studio 6 does not support per-target object files.
set(VS6)
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 6")
@ -446,7 +452,7 @@ install(
TARGETS
testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3
testExe2lib testLib4lib testLib4libdbg testLib4libopt
testLib6
testLib6 testLib7
testLibCycleA testLibCycleB
cmp0022NEW cmp0022OLD
systemlib
@ -505,7 +511,7 @@ export(TARGETS testExe1 testLib1 testLib2 testLib3
NAMESPACE bld_
FILE ExportBuildTree.cmake
)
export(TARGETS testExe2 testLib4 testLib5 testLib6 testExe3 testExe2lib
export(TARGETS testExe2 testLib4 testLib5 testLib6 testLib7 testExe3 testExe2lib
testLib4lib testLib4libdbg testLib4libopt
testLibCycleA testLibCycleB
testLibPerConfigDest

1
Tests/ExportImport/Export/testLib7.c

@ -0,0 +1 @@
int testLib7(void) { return 0; }

2
Tests/ExportImport/Import/A/CMakeLists.txt

@ -33,6 +33,7 @@ target_link_libraries(imp_testExe1
exp_testLib4
exp_testLib5
exp_testLib6
exp_testLib7
exp_testLibCycleA
exp_testLibPerConfigDest
)
@ -66,6 +67,7 @@ target_link_libraries(imp_testExe1b
bld_testLib4
bld_testLib5
bld_testLib6
bld_testLib7
bld_testLibCycleA
bld_testLibPerConfigDest
)

3
Tests/ExportImport/Import/A/imp_testExe1.c

@ -6,6 +6,7 @@ extern int testLib4();
extern int testLib4lib();
extern int testLib5();
extern int testLib6();
extern int testLib7();
extern int testLibCycleA1();
extern int testLibPerConfigDest();
@ -21,7 +22,7 @@ extern testLib4libcfg(void);
int main()
{
return (testLib2() + generated_by_testExe1() + testLib3() + testLib4()
+ testLib5() + testLib6() + testLibCycleA1()
+ testLib5() + testLib6() + testLib7() + testLibCycleA1()
+ testLibPerConfigDest()
+ generated_by_testExe3() + testLib4lib() + testLib4libcfg());
}
Loading…
Cancel
Save