我认为这个问题还没有被问及答案,我已经搜索过但我可能错过了答案,对不起,我很抱歉。 我有一个用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和receiver.c中我正在使用外部系统系统库(例如fileno,getaddrinfo等)但是,系统地说,当我尝试编译时,我得到了相同的错误,如如果cmake忽略了我的#include:
例如在receiver.c中:
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include "receiver.h"
...
hints.ai_flags = AI_PASSIVE;
...
并进入receiver.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。答案 0 :(得分:-1)
salut Pierre: - )
您正在receiver.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/