首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >CMake 3.9.1: Cmake不查找库ncurse

CMake 3.9.1: Cmake不查找库ncurse
EN

Stack Overflow用户
提问于 2017-09-18 18:29:36
回答 2查看 1.3K关注 0票数 1

在您标记为重复之前,我已经阅读了8个类似于Stackoverflow的不同问题,在其他地方更是如此。如果这些答案中的任何一个解决了我的问题,我就不会发布这篇文章。

我在SDL2库中使用了这个模板,没有问题,我所做的唯一修改就是将"SDL2“与set(CURSES_NEED_NCURSES TRUE)行一起更改为”set(CURSES_NEED_NCURSES TRUE)“。(对于任何想知道的人来说,如果没有这句话,这仍然是失败的)

是的,我已经安装了它,而且我可以很容易地用gcc main.c -lncurses编译它,而不会有问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake_minimum_required (VERSION 2.6)
project (ncurses-practice)

# Version info
set(CMake_ncurses-practice_VERSION_MAJOR 1)
set(CMake_ncurses-practice_VERSION_MINOR 0)

# Common Variables
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(SRC ${CMAKE_SOURCE_DIR}/src)
set(HDRS ${CMAKE_SOURCE_DIR}/headers)
set(CMAKE_C_FLAGS " -Wall")

# Set Ncurses
set(CURSES_NEED_NCURSES TRUE)
find_package(Curses)


# Debug
set(CMAKE_BUILD_TYPE Debug)

# Source Files
set(SRC_FILES
  ${SRC}/main.c
)

# Included directories
include_directories("src" "headers" ${CURSES_INCLUDE_DIRS})

# Generate Executable
add_executable(a.out ${SRC_FILES})

# Add libraries here after the project name
target_link_libraries(ncurses-practice ${CURSES_LIBARIES})
EN

回答 2

Stack Overflow用户

发布于 2017-09-19 01:22:42

find_package(Curses)将期望FindCurses.cmake文件出现在您的CMAKE_MODULE_PATH中。

FindCurses.cmake应该找到诅咒库并设置所需的变量。您可以使用find_path、find_library等其他函数在此FindCurses.cmake中查找诅咒库。另一种方法是编写一个.pc文件并使用pkg_check_modules查找这个诅咒库。

除此之外,这两条线都是小车。

add_executable(a.out ${SRC_FILES}) target_link_libraries(ncurses-practice ${CURSES_LIBARIES})

在这里,add_executable正在创建一个名为a.out的目标,您正在为一个不存在的目标( CURSES_LIBRARIES )链接CURSES_LIBRARIES。

所以将您的add_executable更改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_executable(ncurses-practice ${SRC_FILES})
票数 2
EN

Stack Overflow用户

发布于 2017-09-19 01:09:40

您的代码中有一个bug:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_executable(a.out ${SRC_FILES})

target_link_libraries(ncurses-practice ${CURSES_LIBARIES})

需要给target_link_libraries指定目标的名称,而不是项目的名称。因此,第二行应该改为target_link_libraries(a.out ${CURSES_LIBARIES}) (这是一个可执行文件的可怕名称,顺便说一句)。

我在SDL2库中使用了这个模板,没有问题,我所做的唯一修改就是将"SDL2“更改为”诅咒“。

不幸的是,查找脚本不是这样工作的。虽然CMake期望一个行为良好的查找脚本遵循某些约定,但这些规则比严格的规则更宽松。因此,您通常不能依赖与一个查找脚本一起工作的代码来处理另一个查找脚本。

相反,您必须始终检查要使用的脚本的文档(通常甚至是源代码),并根据脚本仔细调整周围的代码。

在您的示例中,相关文档是用于CMake模块的FindCurses文档,而源代码是可以在Kitware的gitlab上找到

从这一点你可以看出,逻辑并不是很聪明。确保本地安装诅咒的路径与脚本所期望的相对应。如果您认为脚本的查找机制可以改进,可以考虑使用改进的版本打开一个拉请求。

此外,在CMake脚本中使用这些值之前,请确保检查从find脚本中使用的任何值是否实际被设置。

另外,请考虑齐瓦列夫的建议不要从CMake脚本中设置CMAKE_BINARY_DIR。这个变量应该由构建项目的用户设置,而不是项目本身。CMAKE_BUILD_TYPE也是如此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46290897

复制
相关文章
Django-DRF | HttpResponse 响应
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2020/02/11
1K0
Django-DRF | HttpResponse 响应
DRF对Django请求响应做了技术升级
Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优化改造,本文就来介绍DRF在这一部分的技术升级。
dongfanger
2020/12/21
9310
DRF对Django请求响应做了技术升级
DRF自定义响应数据格式
DRF自定义响应数据格式 我们经常需要自定义返回消息的格式 例如以下格式 { msg:"suc", err_code:0, data:[] } 异常模块EXCEPTION_HANDLER 创建文件exception.py 在这里我们需要处理发生错误时响应的内容 因为DRF的报错种类比较多,所以当我取detail的内容或错误的最后一条信息为msg 这里将错误信息处理成返回 { msg:"错误信息", err_code:"状态码" } from rest
超级小的大杯柠檬水
2023/05/06
4210
DRF 过滤排序分页异常处理
导入:from rest_framework.filters import SearchFilter
HammerZe
2022/05/09
1.1K0
DRF 过滤排序分页异常处理
Django(50)drf异常模块源码分析
APIView类中dispatch方法中的:response = self.handle_exception(exc)
全栈程序员站长
2022/09/16
2650
【Django源码阅读】Django 自定义异常处理页面源码解读
这个解读来源于一个读者的反馈,于是花了几分钟看了下这部分源码,打算用十分钟的时间写一下,预计阅读需要 5 分钟。
the5fire
2019/08/12
6400
自适应和响应式的区别
“自适应设计和响应式设计的区别”是个老生常谈的问题,在这里将更加直白的来介绍它们之间的不同之处。
青梅煮码
2023/01/31
9800
Django DRF Redis
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
vanguard
2020/03/20
5270
让你的Django应用变DRY的几个最佳实践
Django和Django REST framework(后简称DRF)提供了海量的全局配置、局部配置,来实现上述思想,但配置项太多了,有时人们往往不知道该如何利用。
岂不美哉Frost
2019/12/01
1.7K0
Http响应和HttpServletResponse对应设置方法
其中状态码格外重要, 表示当前请求的响应状态. 服务器处理请求的常见的状态: 200 : 表示请求处理完成并完美返回 302: 表示请求需要进一步细化。 404: 表示客户访问的资源找不到。 500: 表示服务器的资源发送错误。(服务器内部错误) 常见状态码如下:
望天
2018/08/02
5120
Http响应和HttpServletResponse对应设置方法
Django DRF JWT
https://jpadilla.github.io/django-rest-framework-jwt/
vanguard
2020/03/21
5920
Django进阶:DRF(Django REST framework)
DRF即Django REST framework的缩写,官网上说:Django REST framework是一个强大而灵活的工具包,用于构建Web API。简单来说:通过DRF创建API后,就可以通过HTTP请求来获取、创建、更新或删除数据(CRUD)。
一只大鸽子
2023/09/02
6410
Django进阶:DRF(Django REST framework)
Django 统一异常处理
我是在项目自定义的 utils 包下 middlewares.py 模块中下进行中间件的编写。
忆想不到的晖
2021/12/06
2K1
Django 统一异常处理
Django-DRF | ModelViewSet
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2020/02/14
1.5K0
Java自定义异常(优雅的处理异常)
在复杂业务环境下,java自带的异常可能满足不了我们业务的需求, 这个时候我们可以自定义异常来进行对业务异常的处理;
全栈程序员站长
2022/08/31
3K0
DRF框架请求与响应
不会DRF?源码都分析透了确定不来看? - HammerZe - 博客园 (cnblogs.com)
HammerZe
2022/05/09
2750
DRF框架请求与响应
drf之请求、响应、视图
drf 传入视图的request 不再是Django默认的HttpRequest对象,而是drf 提供的拓展了HttpRequest 类的Request 类的对象。
仙人技术
2020/07/09
2.2K0
drf之请求、响应、视图
Django-DRF | 请求
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2020/02/11
6600
Django-DRF | 请求
Django-DRF | ViewSet
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2020/01/16
5050
Django-DRF | ViewSet
django drf_mnbkdrf
我们上篇文章使用到了Serializer类,可能有小伙伴说太过复杂,那么本篇就为大家带来更加简便的序列化类ModelSerializer
全栈程序员站长
2022/09/20
4170
django drf_mnbkdrf

相似问题

带封装参数的Powershell不同凭据

11

使用Invoke-Command运行带参数的Powershell

247

通过CMD运行带参数的Powershell

142

PowerShell添加任务以运行带参数的PowerShell脚本

30

使用vb.net运行带参数的powershell脚本

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文