导入lib

当我们希望在自己的项目中导入其他cmake项目(这里命名为 shit)时,我们通常希望使用一下命令:

find_package(shit REQUIRED CONFIG PATHS "shit build path ")
include_directories(${SHIT_INCLUDE_DIRS})
target_link_libraries(aaa LIB_SHIT)

意外的发生

我们希望导入的项目是 shit,这代表了很多意外的情况,当我们在自己的 cmake 文件里面写入以下代码后,我们常常遇到很多的问题

找不到 SHITConfig.cmake 或者 SHIT-Config.cmake

意外总是如期而至,shit项目根本就没有想让你 find_package 解决
此时你可能会想

include_directories("c:\\code\\shit\\include")
target_link_libraries(aaa "c:\\code\\shit\\build\\\RelWithDebInfo\\shit.lib"))

看似很完美,我的代码跑起来了
但是这不优雅,很不优雅

SHITConfig.cmake 报错

shit 项目生成了 SHITConfig.cmake,但这并不意味着万事大吉了
shit/CMakeLists.txt 中存在下列代码

configure_package_config_file(
  SHITConfig.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/SHITConfig.cmake
  INSTALL_DESTINATION share/SHIT/cmake)
 install(
  FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/FindSHIT.cmake
  DESTINATION share/SHIT/cmake
  COMPONENT CMakeScripts)

在上面这种情况中,shit 将 shit/SHITConfig.cmake.in 复制到 shit/build/SHITConfig.cmake 以及 install 目录 share/SHIT/cmake 下,
并且在 shit/scripts 目录下存在 FindSHIT.cmake,同样的,复制到 shit/scripts/FindSHIT.cmake 到 install 目录 share/SHIT/cmake
这一切看起来都很美好,作者希望我们 cmake build install 一套带走,然后只要指定 share/SHIT/cmake 就可以 find_package 了
but 我根本就不要 install
我的环境使用

cmake -G "Visual Studio 16 2019" -A x64  -Thost=x64  ../

然后打开 vs 编译,和 install 没有半毛钱关系

修改 CMakeLists.txt

使用 export

export(TARGETS LIB_SHIT FILE SHITExport.cmake)

得到一个包含 shit 信息的文件

修改 SHITConfig.cmake.in

加入这一行就好了

include(${CMAKE_CURRENT_BINARY_DIR}/SHITExport.cmake)

修改自己项目的 CMakeLists.cmake

加入

find_package(SHIT REQUIRED CONFIG PATHS "C:\\code\\shit\\build")
target_link_libraries(asmToLlvm LIB_SHIT)

完美


0 条评论

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。