gpt4 book ai didi

cmake - 如何在 cmake 生成器表达式中使用条件

转载 作者:行者123 更新时间:2023-12-05 05:14:54 27 4
gpt4 key购买 nike

我想根据其他变量将库编译为共享库或静态库,例如:

add_library(MyLibrary $<$<IF:${BUILD_SHARED_LIBS},SHARED,STATIC> ${SOURCES})

为清楚起见,我希望这等同于以下内容:

if(BUILD_SHARED_LIBS)
add_library(MyLibrary SHARED ${SOURCES})
elseif()
add_library(MyLibrary STATIC ${SOURCES})
endif()

最佳答案

据我所知,你不能用 generator expressions 做到这一点(无法根据文档查询该方面),因为 BUILD_SHARED_LIBS正是出于这个原因吗?允许您在配置期间选择它的值(使用 -D 命令行选项)。仅当您没有像在代码中那样显式设置库类型时,这才有效,而是像这样

add_library(MyLibrary ${SOURCES})

实际上,这是推荐的做法。如果你需要影响它的值与其他一些条件相关联,你可以用通常的 if()/else() 逻辑覆盖它,确保你至少打印一条信息性的 消息() 为用户。

但是,更好的方法是将这些决定推送给用户(通过 option s)并检查非法组合,发出 message(FATAL_ERROR)。即使该条件是自动确定的,这仍然是一种有值(value)的策略。

关于cmake - 如何在 cmake 生成器表达式中使用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com