首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake不调整C包括

CMake不调整C包括
EN

Stack Overflow用户
提问于 2016-10-15 18:26:34
回答 1查看 279关注 0票数 0

我想这个问题还没有被询问和回答,我已经搜索过了,但是我可能错过了答案,很抱歉。我有一个用C编写的项目,其文件结构如下:

  • CMakeLists.txt
  • receiver.c
  • receiver.h
  • 文件夹:连接
    • real_adress.c
    • real_adress.h

以及下面的CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.6)
project(receiver)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall  -Werror  -Wshadow  -Wextra  -O2 -D_FORTIFY_SOURCE=2  -fstack-protector-all  -g -DDEBUG -Wno-unused-parameter -fno-omit-frame-pointer -lz")

set(SOURCE_FILES receiver.c receiver.h connect/real_address.c connect/real_address.h)

add_library(zlib ${SOURCE_FILES})

add_executable(receiver ${SOURCE_FILES})

我的问题是:在real_adress.c和starver.c中,我使用外部系统系统库(例如fileno、getaddrinfo等),但是,系统地说,我在编译时也遇到了同样的错误,就好像cmake忽略了我的#include:

例如,在收款人中:

代码语言:javascript
复制
#include <sys/types.h>
#include <sys/socket.h>  
#include <netdb.h> 
#include "receiver.h"
...
hints.ai_flags = AI_PASSIVE;
...

并进入收款人。h:

代码语言:javascript
复制
#include <netinet/in.h>
#include <sys/types.h>
...

当我试图运行makefile时,将发送以下错误:

代码语言:javascript
复制
/home/pierre/ClionProjects/CustomProtocol/connect/real_address.c:17:22: erreur : ‘AI_PASSIVE’ undeclared (first use in this function)
hints.ai_flags = AI_PASSIVE;
                 ^

我不明白为什么它认为AI_PASSIVE是未声明的,我已经包含了所有必要的.h文件。

预先感谢所有的答案,我知道我的英语很糟糕,我为此道歉,这不是我的母语。

PS:我认为这并不重要,因为当我手工编译时,我得到了相同的错误,但我使用的是CLion。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-15 19:55:39

皮埃尔:-)

您正在接收器.h中显示包含,但错误在real_address.c中,可能在该文件中没有正确的包含。

在任何情况下,您的cmakelists.txt都是错误的,例如永远不要在CMAKE_C_FLAGS中指定链接器标志,而cmake不是make。

你必须花时间学习cmake,而不只是随机添加一些希望它能起作用的东西。

我建议https://cmake.org/cmake-tutorial/https://web.archive.org/web/20160729173019/https://rix0r.nl/blog/2015/08/13/cmake-guide/

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

https://stackoverflow.com/questions/40062693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档