在项目的根目录中,有两个库文件夹,一个是lib1,另一个是lib2。
在lib1文件夹中,有以下文件:
lib1Config.cmake.in + lib1ConfigVersion.cmake.in + CMakeList.txt
在lib2文件夹中,有以下文件:
lib2Config.cmake.in + lib2ConfigVersion.cmake.in + CMakeList.txt
在lib2中,CMakeList.txt包含FIND_PACKAGE(lib1 REQUIRED)。当我尝试在根目录中运行cmake,它只是简单地调用add_subdirectory(lib1)和add_subdirectory(lib2)时,lib2中的CMakeList.txt抱怨它找不到lib1Config.cmake。然后,我的问题是:我如何进行适当的调整才能使其发挥作用。
仅供参考:这里,lib1实际上是osgworks,lib2是osgbullet。我试图将它们包含在我的项目的lib文件夹中。有可能吗?
答案 0 :(得分:0)
这里的问题是osgBullet尝试在osgWorks上使用find_package
但osgWorks尚未在osgBullet配置的时候构建和安装。
这可以通过这些行(在osgBullet和项目中)修复
if(NOT TARGET <some-osgWorks-target)
find_package(osgWorks REQUIRED)
endif()
...
if(TARGET <some-osgWorks-target)
target_link_libraries(<my-project> <osgWorks-targets>...)
else()
target_link_libraries(<my-project> ${OSGWORKS_LIBRARIES})
endif()
但我想说,最好不要在项目中包含 osgworks 和 osgbullet 。它们是外部依赖项,先决条件。让您项目的CMakeLists.txt(以及生成的IDE或文本编辑器项目)仅包含您当前正在处理的目标。
在配置项目之前,您需要构建并安装 osgworks 和 osgbullet 。这可以手动完成,也可以为此编写一个小的shell脚本。可能的实施:
cmake -H<osgWorks-source> -Bb/osgworks -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$PWD/install \
-DCMAKE_PREFIX_PATH=<other-deps-install-dirs>
cmake --build b/osgworks --target install
cmake -H<osgBullet-source> -Bb/osgbullet -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$PWD/install \
"-DCMAKE_PREFIX_PATH=$PWD/install;<other-deps-install-dirs>"
cmake --build b/osgbullet --target install
如果您使用的是Visual Studio或Xcode,则需要在--config Release
行而不是cmake --build
中使用CMAKE_BUILD_TYPE
设置配置。
之后,您可以配置自己的项目:
cmake -H<my-source> -Bb -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$PWD/install \
"-DCMAKE_PREFIX_PATH=$PWD/install;<other-deps-install-dirs>"