mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
Genex $<COMPILE_LANGUAGE>: Extend contexts supported
When genex $<TARGET_PROPERTY:...> for properties like INCLUDE_DIRECTORIES is evaluated as part of add_custom_command or add_custom_target, genex $<COMPILE_LANGUAGE> and $<COMPLIE_LANG_AND_ID> should be supported. Fixes: #20926
This commit is contained in:
@@ -154,6 +154,14 @@ bool cmGeneratorExpressionDAGChecker::EvaluatingPICExpression() const
|
||||
return this->Top()->Property == "INTERFACE_POSITION_INDEPENDENT_CODE";
|
||||
}
|
||||
|
||||
bool cmGeneratorExpressionDAGChecker::EvaluatingCompileExpression() const
|
||||
{
|
||||
cm::string_view property(this->Top()->Property);
|
||||
|
||||
return property == "INCLUDE_DIRECTORIES"_s ||
|
||||
property == "COMPILE_DEFINITIONS"_s || property == "COMPILE_OPTIONS"_s;
|
||||
}
|
||||
|
||||
bool cmGeneratorExpressionDAGChecker::EvaluatingLinkExpression() const
|
||||
{
|
||||
cm::string_view property(this->Top()->Property);
|
||||
|
||||
@@ -68,6 +68,7 @@ struct cmGeneratorExpressionDAGChecker
|
||||
|
||||
bool EvaluatingGenexExpression() const;
|
||||
bool EvaluatingPICExpression() const;
|
||||
bool EvaluatingCompileExpression() const;
|
||||
bool EvaluatingLinkExpression() const;
|
||||
bool EvaluatingLinkOptionsExpression() const;
|
||||
|
||||
|
||||
@@ -967,9 +967,10 @@ static const struct CompileLanguageNode : public cmGeneratorExpressionNode
|
||||
const std::vector<std::string>& parameters,
|
||||
cmGeneratorExpressionContext* context,
|
||||
const GeneratorExpressionContent* content,
|
||||
cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
|
||||
cmGeneratorExpressionDAGChecker* dagChecker) const override
|
||||
{
|
||||
if (context->Language.empty()) {
|
||||
if (context->Language.empty() &&
|
||||
(!dagChecker || !dagChecker->EvaluatingCompileExpression())) {
|
||||
reportError(
|
||||
context, content->GetOriginalExpression(),
|
||||
"$<COMPILE_LANGUAGE:...> may only be used to specify include "
|
||||
@@ -1014,7 +1015,9 @@ static const struct CompileLanguageAndIdNode : public cmGeneratorExpressionNode
|
||||
const GeneratorExpressionContent* content,
|
||||
cmGeneratorExpressionDAGChecker* dagChecker) const override
|
||||
{
|
||||
if (!context->HeadTarget || context->Language.empty()) {
|
||||
if (!context->HeadTarget ||
|
||||
(context->Language.empty() &&
|
||||
(!dagChecker || !dagChecker->EvaluatingCompileExpression()))) {
|
||||
// reportError(context, content->GetOriginalExpression(), "");
|
||||
reportError(
|
||||
context, content->GetOriginalExpression(),
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
enable_language(C)
|
||||
|
||||
add_library (lib SHARED empty.c)
|
||||
set_target_properties(lib PROPERTIES
|
||||
INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:C>:/usr/include>"
|
||||
COMPILE_DEFINITIONS "$<$<COMPILE_LANGUAGE:C>:DEF>"
|
||||
COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:C>:-O>")
|
||||
|
||||
add_custom_target(drive
|
||||
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
|
||||
|
||||
add_custom_command(TARGET drive PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
|
||||
@@ -8,3 +8,4 @@ run_cmake(COMPILE_LANGUAGE-add_executable)
|
||||
run_cmake(COMPILE_LANGUAGE-add_library)
|
||||
run_cmake(COMPILE_LANGUAGE-add_test)
|
||||
run_cmake(COMPILE_LANGUAGE-unknown-lang)
|
||||
run_cmake(COMPILE_LANGUAGE-TARGET_PROPERTY)
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
enable_language(C)
|
||||
|
||||
add_library (lib SHARED empty.c)
|
||||
set_target_properties(lib PROPERTIES
|
||||
INCLUDE_DIRECTORIES "$<$<COMPILE_LANG_AND_ID:C,GNU>:/usr/include>"
|
||||
COMPILE_DEFINITIONS "$<$<COMPILE_LANG_AND_ID:C,GNU>:DEF>"
|
||||
COMPILE_OPTIONS "$<$<COMPILE_LANG_AND_ID:C,GNU>:-O>")
|
||||
|
||||
add_custom_target(drive
|
||||
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
|
||||
|
||||
add_custom_command(TARGET drive PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:lib,INCLUDE_DIRECTORIES>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_DEFINITIONS>
|
||||
$<TARGET_PROPERTY:lib,COMPILE_OPTIONS>)
|
||||
@@ -8,3 +8,4 @@ run_cmake(COMPILE_LANG_AND_ID-add_executable)
|
||||
run_cmake(COMPILE_LANG_AND_ID-add_library)
|
||||
run_cmake(COMPILE_LANG_AND_ID-add_test)
|
||||
run_cmake(COMPILE_LANG_AND_ID-unknown-lang)
|
||||
run_cmake(COMPILE_LANG_AND_ID-TARGET_PROPERTY)
|
||||
|
||||
Reference in New Issue
Block a user