Add generator expression support to OUTPUT_NAME target property
This commit is contained in:
parent
9a1ef0dcfd
commit
809159c9b7
|
@ -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>`
|
||||||
|
|
|
@ -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)>`.
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
int testLib7(void) { return 0; }
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
@ -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…
Reference in New Issue