首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BACnet堆栈生成文件

BACnet堆栈生成文件
EN

Stack Overflow用户
提问于 2014-08-23 16:06:22
回答 1查看 348关注 0票数 1

我在8/23更新了这一职位,以反映工作解决办法。

我正在使用sourceforge上的c BACnet堆栈。http://sourceforge.net/projects/bacnet/

我正在试图修改库中包含的演示服务器。服务器几乎完全符合我的要求,只是我需要将它连接到我编写的其他一些c++程序。

我现在的问题是,我不知道如何将自己的c++程序添加到演示服务器中。演示中有几个嵌套的Makefile。我尝试过将我的文件添加到这些Makefile中,但是编译器(gcc)并不喜欢它。

最近的错误是:没有规则使目标../../demo/object/test.o', needed bybacserv‘。停止播放。

我不是c专家。我的业余时间已经用了大约一年了。我理解Makefile的基本知识,但是这个演示中的Makefile显然超出了我的范围。

有熟悉这个图书馆的人能帮我点忙吗?

有比sourceforge网站更好的文档吗?

在本例中,我只是尝试将test.c添加到ai.c。

/demo/server/Makefile

代码语言:javascript
复制
OBJECT_SRC = \
    $(BACNET_OBJECT)/device.c \
    $(BACNET_OBJECT)/ai.c \
    $(BACNET_OBJECT)/ao.c \
    $(BACNET_OBJECT)/av.c \
    $(BACNET_OBJECT)/bi.c \
    $(BACNET_OBJECT)/bo.c \
    $(BACNET_OBJECT)/bv.c \
    $(BACNET_OBJECT)/csv.c \
    $(BACNET_OBJECT)/lc.c \
    $(BACNET_OBJECT)/lsp.c \
    $(BACNET_OBJECT)/ms-input.c \
    $(BACNET_OBJECT)/mso.c \
    $(BACNET_OBJECT)/msv.c \
    $(BACNET_OBJECT)/nc.c  \
    $(BACNET_OBJECT)/trendlog.c \
    $(BACNET_OBJECT)/test.c \      <-- New entry
    $(BACNET_OBJECT)/bacfile.c

/lib/Makefile

代码语言:javascript
复制
CORE_SRC = \
$(BACNET_CORE)/apdu.c \
$(BACNET_CORE)/npdu.c \
$(BACNET_CORE)/bacdcode.c \
$(BACNET_CORE)/bacint.c \
$(BACNET_CORE)/bacreal.c \
$(BACNET_CORE)/bacstr.c \
$(BACNET_CORE)/bacapp.c \
$(BACNET_CORE)/bacprop.c \
$(BACNET_CORE)/bactext.c \
$(BACNET_CORE)/datetime.c \
$(BACNET_CORE)/indtext.c \
$(BACNET_CORE)/key.c \
$(BACNET_CORE)/keylist.c \
$(BACNET_CORE)/proplist.c \
$(BACNET_CORE)/debug.c \
$(BACNET_CORE)/bigend.c \
$(BACNET_CORE)/arf.c \
$(BACNET_CORE)/awf.c \
$(BACNET_CORE)/cov.c \
$(BACNET_CORE)/dcc.c \
$(BACNET_CORE)/iam.c \
$(BACNET_CORE)/ihave.c \
$(BACNET_CORE)/rd.c \
$(BACNET_CORE)/rp.c \
$(BACNET_CORE)/rpm.c \
$(BACNET_CORE)/timesync.c \
$(BACNET_CORE)/whohas.c \
$(BACNET_CORE)/whois.c \
$(BACNET_CORE)/wp.c \
$(BACNET_CORE)/wpm.c \
$(BACNET_CORE)/abort.c \
$(BACNET_CORE)/reject.c \
$(BACNET_CORE)/bacerror.c \
$(BACNET_CORE)/ptransfer.c \
$(BACNET_CORE)/memcopy.c \
$(BACNET_CORE)/filename.c \
$(BACNET_CORE)/tsm.c \
$(BACNET_CORE)/bacaddr.c \
$(BACNET_CORE)/address.c \
$(BACNET_CORE)/bacdevobjpropref.c \
$(BACNET_CORE)/bacpropstates.c \
$(BACNET_CORE)/alarm_ack.c \
$(BACNET_CORE)/event.c \
$(BACNET_CORE)/getevent.c \
$(BACNET_CORE)/get_alarm_sum.c \
$(BACNET_CORE)/readrange.c \
$(BACNET_CORE)/timestamp.c \
$(BACNET_CORE)/test.c \               <-- Do not include test.c in this Makefile at all
$(BACNET_CORE)/version.c

新的文件位置:

代码语言:javascript
复制
test.c is located in /src             <-- Should be located in /demo/object
test.h is located in /include         <-- This works ok here

test.h

代码语言:javascript
复制
#ifndef _TEST_INCLUDE_
#define _TEST_INCLUDE_

void printit();

#endif

test.c

代码语言:javascript
复制
#include <stdio.h>                    <-- Needed to add #include <stdio.h>
#include "test.h"

void printit (){
    printf("it....");
}

/demo/object/ai.c

代码语言:javascript
复制
...
#include "handlers.h"
#include "timestamp.h"
#include "test.h"
#include "ai.h"
...
void Analog_Input_Init(
    void)
{
    unsigned i;
#if defined(INTRINSIC_REPORTING)
    unsigned j;
#endif
    printit(); //*****************************************************************
    for (i = 0; i < MAX_ANALOG_INPUTS; i++) {
        printf("Initializing AI:%u\n",i);
        AI_Descr[i].Present_Value = 0.0f;
        AI_Descr[i].Out_Of_Service = false;
        AI_Descr[i].Units = UNITS_PERCENT;
        AI_Descr[i].Reliability = RELIABILITY_NO_FAULT_DETECTED;
#if defined(INTRINSIC_REPORTING)
        AI_Descr[i].Event_State = EVENT_STATE_NORMAL;
        /* notification class not connected */
        AI_Descr[i].Notification_Class = BACNET_MAX_INSTANCE;
        /* initialize Event time stamps using wildcards
           and set Acked_transitions */
        for (j = 0; j < MAX_BACNET_EVENT_TRANSITION; j++) {
            datetime_wildcard_set(&AI_Descr[i].Event_Time_Stamps[j]);
            AI_Descr[i].Acked_Transitions[j].bIsAcked = true;
        }
        /* Set handler for GetEventInformation function */
        handler_get_event_information_set(OBJECT_ANALOG_INPUT,
            Analog_Input_Event_Information);
        /* Set handler for AcknowledgeAlarm function */
        handler_alarm_ack_set(OBJECT_ANALOG_INPUT, Analog_Input_Alarm_Ack);
        /* Set handler for GetAlarmSummary Service */
        handler_get_alarm_summary_set(OBJECT_ANALOG_INPUT,
            Analog_Input_Alarm_Summary);
#endif
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-23 17:12:13

我想说的是,你的测试不能由gcc来做。不过,Makefile确实指定要创建它:.c.o: ${CC} -c ${CFLAGS} $*.c -o $@

我注意到$(BACNET_OBJECT)/demo/server/Makefile中指的是路径/demo/object

您应该尝试在那里添加test.c。

我相信您不需要在/lib/Makefile中添加test.c

很长一段时间我没有做任何C,但是你没有忘记在测试中用#include <stdio.h>打印吗?

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

https://stackoverflow.com/questions/25463824

复制
相关文章

相似问题

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