本地安装与CPack生成器安装的冲突问题及解决方案问询
解决CMake安装后重新运行时的运行时搜索路径警告
这个警告的核心问题就是你提到的:本地安装和二进制打包场景的install逻辑混淆了。解决思路就是通过CMake自定义选项区分两种场景,给install语句添加条件判断,具体做法如下:
1. 添加场景区分选项
在项目根目录的CMakeLists.txt里新增一个开关选项,默认关闭(对应本地安装场景):
option(BUILD_PACKAGE "开启该选项时,会将第三方依赖库与自身产物一同安装,用于生成二进制安装包" OFF)
2. 给依赖库的install语句加条件判断
把原来安装第三方依赖库的代码,用if(BUILD_PACKAGE)包裹,仅在打包场景下执行:
# 仅在打包场景下安装系统已有的第三方依赖库(比如libtiff) if(BUILD_PACKAGE) install(TARGETS libtiff LIBRARY DESTINATION lib) # 其他需要打包的依赖库可按同样方式处理 endif() # 自身产物的install语句保持不变,两种场景都执行 install(TARGETS your_project_target LIBRARY DESTINATION lib) install(DIRECTORY include/your_project/ DESTINATION include)
3. 不同场景的使用方式
- 本地安装:直接正常编译安装即可,不会安装重复的系统依赖库,避免
/usr/local/lib出现冲突文件cmake .. make install - 生成二进制安装包:开启
BUILD_PACKAGE选项后再安装,此时会把自身库和依赖库放在同一目录,方便后续打包cmake .. -DBUILD_PACKAGE=ON make install
这样就能彻底区分两种场景,解决运行时搜索路径的警告问题。
内容的提问来源于stack exchange,提问作者Joachim W
相关产品推荐
相关产品推荐

