Member 13952559 Ответов: 2

Нет вывода printf на терминал при использовании makefile


Мой Makefile:
HEADERS = headers.h macros.h main.h socket.h
 

main.o : main.c main.h
	cc -c main.c

socket.o : socket.c headers.h macros.h
	cc -c socket.c


главная.с
#include "main.h"
main()
{
printf("%s\n","Connect_Socket Start");
Connect_Socket(IP_ADDRESS, PORT);
printf("%s\n","Connect_Socket End");
   while(1)
   {
       Send_Message();
       Recv_Message();
   }
    Close_Socket();
}


гнездо.с
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <errno.h> 
#include "headers.h"
#include "macros.h"

void Connect_Socket() {
    //definiton...
} 

int Send_Message() {
    //definiton...
}

int Recv_Message() {
   //definiton...
}

void Close_Socket() {
    //definiton...
}


гнездо.ч
//function declarations of socket.c


макросы.ч
//Some macros used in socket.c and main.c


заголовки.ч
//Includes standard .h files


главная.ч
#include "headers.h"
#include "socket.h"
#include "macros.h"

#include "MQTTPacket/MQTTPacket.h"



При выполнении $make на терминале я не получаю никаких ошибок. Однако я также не получаю никаких сообщений printf ().

Что я уже пробовал:

Я попытался изменить свой makefile на:
cc	=	gcc
OBJFILES	=	socket.o main.o
TARGET	=	mqtt_c8y

all: $(TARGET)

$TARGET: $(OBJFILES)
	$(CC) -o $(TARGET) $(OBJFILES)


Однако при комментировании вызовов функций в main.c и компиляции просто main.c с помощью $gcc main.c и затем $./a.out, Я действительно получаю сообщения printf ().

2 Ответов

Рейтинг:
7

Jochen Arndt

Проведение делать построит цель в соответствии с указанными правилами.

Но он не будет выполнять созданное приложение. Чтобы сделать это после успешной сборки, сделайте это так же, как вы сделали с ручной компиляцией: введите имя исполняемого файла в командной строке

./mqtt_c8y


Рейтинг:
2

OriginalGriff

Я думаю - и без вашего компьютера под рукой это все, что может быть - вы не получаете вывод, потому что приложение слишком занято подключением сокета, чтобы обновить дисплей.

Попробуйте добавить пользовательский ввод после printf и посмотреть, что произойдет.