gpt4 book ai didi

c++ - 如何为主机应用程序和任何使用的库使用单独的 CMake 目标?

转载 作者:行者123 更新时间:2023-11-30 04:01:20 26 4
gpt4 key购买 nike

当我使用 CMake 和也使用 CMake 的库时,我将库目录添加到我的 CMake 项目中,以允许在我的项目旁边构建库。例如:

 # add SFML library dependencies
add_subdirectory("third_party/lib/SFML")
include_directories("third_party/lib/SFML/include")
target_link_libraries(${CMAKE_PROJECT_NAME} sfml-system sfml-window sfml-graphics)

然后 CMake 自动匹配项目 Debug 构建使用库 Debug 构建,项目 Release 构建使用库 Release 构建。在某些情况下,为主项目及其使用的每个库分别控制构建目标是很有用的。例如,如果我对在库代码内部调试不感兴趣,我将只想在 Debug 模式下构建我的代码,并将其链接到库的 Release 版本,因为我不想牺牲额外的性能。在其他情况下,如果我怀疑其中有错误,我可能只想在一个使用过的库中进行调试,但同样出于性能原因,我想链接所有其他库的发布版本。是否有可能实现这种行为,最好的方法是什么?

最佳答案

对于来自同一构建树的导入目标和依赖目标,您将始终获得您描述的行为,即每个配置都使用其自己的匹配库构建。弄乱这个意味着摆弄 CMake 的内部结构,所以我建议不要这样做。

如果你想链接特定版本的库,最可靠的方法是使用 find_library .请注意,这仅在库依赖项在配置时以其二进制形式可用时才有效。也就是说,您不能再将依赖构建为依赖项目的一部分。

如果这不是一个选项,请考虑使用 ExternalProject_Add构建依赖项并手动指定依赖项二进制文件的位置。

总而言之,您当前的方法是最方便的方法,因此只有在依赖项的调试构建的性能是一个真正的问题时才更改它。另请注意,虽然混合调试和发布构建对于 C 库来说大多很好,但对于 C++ 库来说很容易中断,尤其是当接口(interface)上有标准库类型时。

关于c++ - 如何为主机应用程序和任何使用的库使用单独的 CMake 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25838162/

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