gpt4 book ai didi

c++ - 是否可以将 cmake 项目链接到子项目?

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:16 26 4
gpt4 key购买 nike

我有一个 C++ 库项目,它带有一个 examples 文件夹。这些示例是独立的,即它们可以在没有源代码树的其余部分的情况下进行编译,就好像它们是使用该库的真实应用程序一样。他们使用提供的 FindMyLib.cmake 在系统中查找已安装的库。

我希望能够将它们与整个库一起构建。最初,我将它们添加为子目录:

if(MYLIB_BUILD_EXAMPLES)
add_subdirectory(examples/fooexample)
add_subdirectory(examples/barexample)
endif()

但是这是行不通的,因为在安装库之前我不能使用find_package。我可以将默认构建目录添加到搜索路径,但这还不够,因为在 cmake 运行时库尚未构建(很明显)。

我该怎么做才能解决这个问题?有没有一种方法可以在构建库时透明地将库链接到这些子项目(并且还“禁用”find_package,因为如果不安装它肯定会失败)。

最佳答案

只需准备fake FindMyLib.cmake,它使用build 树链接到库,而不是install一。例如,它可以将变量 MyLib_LIBRARY 变量设置为库 target:

cmake-build/FindMyLib.cmake:

set(MyLib_LIBRARY MyLib)
set(MyLib_INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/include)
...

然后在 CMAKE_MODULE_PATH 列表前加上目录,包含假脚本。这样的方式将被示例使用:

if(MYLIB_BUILD_EXAMPLES)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake-build ${CMAKE_MODULE_PATH})
add_subdirectory(examples/fooexample)
add_subdirectory(examples/barexample)
endif()

关于c++ - 是否可以将 cmake 项目链接到子项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37719094/

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