我正在为如何在我的cmake项目中包含第三方库而苦恼。目前,我构建了Poco和一堆其他库,它们都生成了各自的Config.cmake文件,我使用这些文件与find_package一起使用。我有一个封装的构建脚本,它构建了我所有的依赖项,并将它们分别打包为调试和发布版本(除非我真的需要进行维护,否则我不想调整它们的cmake脚本)。
我以为我可以只需执行:
find_package(Foo
HINTS "${CMAKE_SOURCE_DIR}/some/path/debug/libFoo/lib/cmake"
REQUIRED
)
get_target_property(LIB_FOO_DEBUG lib_foo LOCATION)
find_package(Foo
HINTS "${CMAKE_SOURCE_DIR}/some/path/release/libFoo/lib/cmake"
REQUIRED
)
get_target_property(LIB_FOO_RELEASE lib_foo LOCATION)
set(LIB_FOO_LIBRARIES optimized "${LIB_FOO_RELEASE}" debug "${LIB_FOO_DEBUG}")
message("LIB_FOO_LIBRARIES: \"${LIB_FOO_LIBRARIES}\"")
这将产生:
LIB_FOO_LIBRARIES: "optimized;C:/path/to/proj/some/path/debug/libFoo/lib/foo.lib;debug;C:/path/to/proj/some/path/debug/libFoo/lib/foo.lib"
似乎第一次针对目标Foo调用find_package已被缓存,这并不是我想要的。我是不是走错了路?如何正确地使用Visual Studio生成器处理第三方库?
非常感谢任何指导。