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 library target. If not set, the logical target name is used by
default. default.
Contents of ``OUTPUT_NAME`` and the variants listed below may use
:manual:`generator expressions <cmake-generator-expressions(7)>`.
See also the variants: See also the variants:
* :prop_tgt:`OUTPUT_NAME_<CONFIG>` * :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 // OUTPUT_NAME
props.push_back("OUTPUT_NAME"); props.push_back("OUTPUT_NAME");
std::string outName;
for(std::vector<std::string>::const_iterator i = props.begin(); for(std::vector<std::string>::const_iterator i = props.begin();
i != props.end(); ++i) 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> 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. # Work-around: Visual Studio 6 does not support per-target object files.
set(VS6) set(VS6)
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 6") if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 6")
@ -446,7 +452,7 @@ install(
TARGETS TARGETS
testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3 testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3
testExe2lib testLib4lib testLib4libdbg testLib4libopt testExe2lib testLib4lib testLib4libdbg testLib4libopt
testLib6
testLib6 testLib7
testLibCycleA testLibCycleB testLibCycleA testLibCycleB
cmp0022NEW cmp0022OLD cmp0022NEW cmp0022OLD
systemlib systemlib
@ -505,7 +511,7 @@ export(TARGETS testExe1 testLib1 testLib2 testLib3
NAMESPACE bld_ NAMESPACE bld_
FILE ExportBuildTree.cmake FILE ExportBuildTree.cmake
) )
export(TARGETS testExe2 testLib4 testLib5 testLib6 testExe3 testExe2lib
export(TARGETS testExe2 testLib4 testLib5 testLib6 testLib7 testExe3 testExe2lib
testLib4lib testLib4libdbg testLib4libopt testLib4lib testLib4libdbg testLib4libopt
testLibCycleA testLibCycleB testLibCycleA testLibCycleB
testLibPerConfigDest 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_testLib4
exp_testLib5 exp_testLib5
exp_testLib6 exp_testLib6
exp_testLib7
exp_testLibCycleA exp_testLibCycleA
exp_testLibPerConfigDest exp_testLibPerConfigDest
) )
@ -66,6 +67,7 @@ target_link_libraries(imp_testExe1b
bld_testLib4 bld_testLib4
bld_testLib5 bld_testLib5
bld_testLib6 bld_testLib6
bld_testLib7
bld_testLibCycleA bld_testLibCycleA
bld_testLibPerConfigDest bld_testLibPerConfigDest
) )

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

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