我想这个问题还没有被询问和回答,我已经搜索过了,但是我可能错过了答案,很抱歉。我有一个用C编写的项目,其文件结构如下:
以及下面的CMakeLists.txt:
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:
例如,在收款人中:
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include "receiver.h"
...
hints.ai_flags = AI_PASSIVE;
...并进入收款人。h:
#include <netinet/in.h>
#include <sys/types.h>
...当我试图运行makefile时,将发送以下错误:
/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。
发布于 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/
https://stackoverflow.com/questions/40062693
复制相似问题