我一直在摆弄CMake有一段时间了,试图尽可能多地学习这个工具。我不得不承认,单配置环境(Makefiles,Ninja)与多配置环境(Visual Studio,XCode等)和生成器表达式的概念确实让我感到困惑。所以,这是我的问题在一个简短的格式:
在CMake中,检查是否是一个好主意(例如:if条件)来查看我们正在处理的环境,并从那里继续执行特定的命令?(例如,检查我们是否正在处理多配置环境,并仅在此情况下使用生成器表达式)
或者,不管我们处理的是什么,对它们都使用生成器表达式是可能的,还是更好的?
1条答案
按热度按时间n9vozmp41#
或者,不管我们处理的是什么,对它们都使用生成器表达式是可能的,还是更好的?
通常是的我建议你尽可能多地这样做。如果你支持多配置生成器,你通常只是免费获得单配置生成器支持。
在CMake中,检查是否是一个好主意(例如:if条件)来查看我们正在处理的环境,并从那里继续执行特定的命令?(例如,检查我们是否正在处理多配置环境,并仅在此情况下使用生成器表达式)
根据我上面所说的,我希望这只会导致无用的重复,降低可读性和维护负担。我建议只有在你别无选择的情况下才这样做,以实现某些特定的功能。例如,如果你想为多配置生成一些文件到每个配置的配置文件,但不想为单配置添加额外的中间配置文件(我想不出为什么有人会想这样做,所以这可能不是一个很好的例子,但这是我想到的)。
另请参阅https://stackoverflow.com/a/73562787/11107541,其中讨论了the global property called
GENERATOR_IS_MULTI_CONFIG
。好吧,出于兴趣的目的,我浏览了我自己的一个项目,并搜索了我在哪里使用
GENERATOR_IS_MULTI_CONFIG
,我在三个地方使用它(我不是说我在这里知道最好的,我正在做最聪明的事情-可能有更好的方法来获得我想要的东西,我只是不知道-只是试图提出一些更现实的例子):CMAKE_RUNTIME_OUTPUT_DIRECTORY
和它的朋友这样的变量定义“默认值”,这样每个配置都有一个中间值来分隔它们的输出,但对于单一配置生成器则没有。CMAKE_BUILD_TYPE
定义docstring和STRINGS
属性(这只是我的用户的生活质量问题,以避免CMAKE_BUILD_TYPE
对多配置生成器是否有意义(它没有)的常见混淆)。-fprofile-prefix-path
定制PGO构建配置。