解决CMake Found package不好使,找不到已安装的依赖包

当我们在使用Cmake编译项目的时候,CMakeList.txt中经常会需要链接到第三方库,一些正规的依赖包,通常会安装在系统路径,譬如/usr/include, /usr/lib之类的位置,并且还会具备CMake foundpackage.cmake之类的配置文件。这时候,我们可以使用found(package)语句,并使用该依赖包常用的环境变量去找到它。

好了,那么如果是我们自己编译的包,自己的代码,又该如何呢?

这时候,很多应该就会想到要使用target_include_directories之类的语句,target_link之类的。

如果你自己的包放在了自己的代码目录下,譬如什么dll,so之类的库文件。

这时候就不要使用include_dirctories之类的泛包含语句了。而是应该使用target开头的语句,让cmake去你指定的路径去寻找,而不是include一个大范围,cmake无法达到你的预期。

除此之外,就是可以使用pkgconfig,但是要求你的库里面需要有后缀为pc的文件。

                                                                                                                                                                                                                                                                                                         

CMake中,如果不到NEON相关的依赖(如`ARMNeon_LIBRARY`),你需要提供一种机制来处理这种情况,通常会括以下几个步骤: 1. **条件检查**:首先,在使用NEON之前,通过`ARMNeon_FOUND`变量判断NEON是否存在。如果没有到,`find_package_handle_standard_args`会返回失败。 2. **错误消息**:如果`ARMNeon_FOUND`为`FALSE`,你可以显示一条友好的错误信息告知用户NEON未到,以及可能的原因。例如: ```cmake if(NOT ARMNeon_FOUND) message(FATAL_ERROR "NEON support is required for this project, but could not be found. Please check your system or install the necessary libraries.") endif() ``` 3. **默认配置**:如果使用NEON,可以设置默认的编译选项,比如移除含NEON的编译标志: ```cmake if(ARMNeon_FOUND) # ...(前面已经添加了使用NEON的编译标志) else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "Using a default build without NEON support.") endif() ``` 4. **可选组件**:如果你的应用允许有无NEON的支持选项,可以在构建时让用户选择是否启用: ```cmake option(BUILD_WITH_NEON "Build with NEON support (requires armv8-a architecture)" OFF) if(BUILD_WITH_NEON AND NOT ARMNeon_FOUND) message(WARNING "NEON support is requested but not available, disabling feature.") set(BUILD_WITH_NEON OFF) endif() ``` 这样,如果用户试图启用但NEON可用,他们将看到警告并可以选择禁用该功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1号程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值