我正在尝试在两台设备(例如两台计算机)之间创建一个通信通道,它将使用加密网络协议Salt channelv2并相互转发数据。我创建了2个应用程序,其中第一个应用程序演示了Salt channelv2协议的功能,第二个应用程序创建了一个安全的通信通道(特别是使用TCP/IP模型)。应用程序正在工作,我在CLI中使用链接编译它们,现在我正试图创建一个makefile文件,以便为用户轻松编译程序。
这是我的Makefile:CC=gcc
CFLAGS=-O2 -Wall -g -fcommon -I./salt_org -I./header_folders -I./library
#LDFLAGS=
all:program
program: salt_buffer.o libcrypto.a
$(CC) $(CFLAGS) -o program.exe salt_buffer.o libcrypto.a
randombytes.o: randombytes.c
$(CC) $(CFLAGS) -c randombytes.c
tweetnacl_modified.o: tweetnacl_modified.c tweetnacl_modified.h
$(CC) $(CFLAGS) -c tweetnacl_modified.c
tweetnacl_modified_wrapper.o: tweetnacl_modified_wrapper.c
$(CC) $(CFLAGS) -c tweetnacl_modified_wrapper.c
salt.o: salt.c salt.h salti_handshake.h salti_util.h
$(CC) $(CFLAGS) -c salt.c
salt_io.o: salt_io.c salti_util.h
$(CC) $(CFLAGS) -c salt_io.c
salti_handshake.o: salti_handshake.c salti_handshake.h
$(CC) $(CFLAGS) -c salti_handshake.c
salti_util.o: salti_util.c salti_util.h
$(CC) $(CFLAGS) -c salti_util.c
salt_modified.o: salt_modified.c salt_modified.h salt.h
$(CC) $(CFLAGS) -c salt_modified.c
salt_buffer.o: salt_buffer.c header_folders/salt.h
header_folders/salti_handshake.h header_folders/salti_util.h
header_folders/salt_modified.h header_folders/salt_io.h
$(CC) $(CFLAGS) -c salt_buffer.c
libcrypto.a: salt.o salti_handshake.o salti_util.o salt_io.o tweetnacl_modified_wrapper.o
tweetnacl_modified.o randombytes.o salt_modified.o
ar -cvq -o libcrypto.a salt.o salti_handshake.o salti_util.o salt_io.o
tweetnacl_modified_wrapper.o tweetnacl_modified.o randombytes.o salt_modified.o
clean:
rm -f program *.o *.a hlavickove_subory/*.gch
在一个文件夹中是源代码和文件夹,如salt_org, header_folders, library, salt_buffer.c, salt_modified.c和makefile。主程序是salt_buffer.c,而salt_modified.c包含我提供的源文件,其中包含salt_buffer.c所使用的应用程序所需的主体函数。使用辅助源代码,我尝试创建一个静态库libcrypto.a。源代码,如randombytes.c, tweetnacl_modified.c, tweetnacl_modified_wrapper.c在库文件夹中。其他源代码如salt.c、salti_handshake.c、salti_util.c、salt_io.c在salt_org文件夹中。我使用的所有头文件都在header_folders文件夹中。
在工作中,我受到了这个主题的启发:在这里输入链接描述。
运行makefile文件时遇到的问题是:GCC - 0 . 0Gcc.exe:致命错误:没有输入文件编译终止。make: *** [: .o] Error 1
在源文件中,我有像这样的文件路径,例如salt_buffer.c:
#include "salt.h"
#include "salt_io.h"
#include "salti_util.h"
#include "salti_handshake.h"
#include "salt_modified.h"
我使用11.2的Winlibs编译器你能告诉我我的错误吗?
首先,在提出这样的问题时,您应该总是包括(通过剪切和粘贴)生成错误的实际编译行,而不仅仅是错误。出现这种错误的原因总是可以在编译行中找到。
第二,你的问题是你不应该在编译行中包含头文件。由于源文件中的#include ...
命令,编译器将包含头文件:您也不能在编译行中包含它们。像这样的规则:
salt.o: salt.c salt.h salti_handshake.h salti_util.h
$(CC) $(CFLAGS) -c salt.c salti_handshake.h salti_util.h
应该是:
salt.o: salt.c salt.h salti_handshake.h salti_util.h
$(CC) $(CFLAGS) -c salt.c
,就这些。对于头文件出现在编译行上的所有其他食谱也是如此。
有很多更好的方法来编写这个makefile,这样你就不必重复这么多次,但是修复上面的问题应该可以让你当前的makefile正常工作。