CMake不会重新考虑C包含

时间:2016-10-15 18:26:35

标签: c cmake include clion

我认为这个问题还没有被问及答案,我已经搜索过但我可能错过了答案,对不起,我很抱歉。 我有一个用C语言编写的项目,文件结构如下:

  • 的CMakeLists.txt
  • receiver.c
  • receiver.h
  • foler:connect
    • real_adress.c
    • real_adress.h

以下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。

1 个答案:

答案 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/