白笔留墨 2024-07-02 14:12 采纳率: 0%
浏览 190

在运行编译文件的时候,出现mak:98: *** multiple target patterns. Stop问题

C:\Users\Administrator\Desktop\tcm2-simulator-master\tcm2-simulator\tpm2-sim-src\src>make -f makefile.mak debug
makefile.mak:98: *** multiple target patterns. Stop.

#################################################################################
#                                       #
#       Windows MinGW TPM2 Makefile OpenSSL 1.1.1 32-bit          #
#                Written by Ken Goldman                #
#           IBM Thomas J. Watson Research Center            #
#         $Id: makefile.mak 1540 2019-12-04 22:33:10Z kgoldman $        #
#                                       #
# (c) Copyright IBM Corporation 2014 - 2019                   #
#                                       #
# All rights reserved.                               #
#                                       #
# Redistribution and use in source and binary forms, with or without    #
# modification, are permitted provided that the following conditions are    #
# met:                                       #
#                                       #
# Redistributions of source code must retain the above copyright notice,    #
# this list of conditions and the following disclaimer.             #
#                                       #
# Redistributions in binary form must reproduce the above copyright    #
# notice, this list of conditions and the following disclaimer in the    #
# documentation and/or other materials provided with the distribution.    #
#                                       #
# Neither the names of the IBM Corporation nor the names of its            #
# contributors may be used to endorse or promote products derived from    #
# this software without specific prior written permission.            #
#                                       #
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS    #
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    #
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    #
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT    #
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    #
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT    #
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    #
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    #
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT    #
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    #
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.    #
#                                       #
#################################################################################

# Windows OpenSSL 1.1.1 32-bit with mingw

# Please contribute a solution for OpenSSL 64-bit (Shining Light),
# which does not include the mingw .a files.

# For this to work, copy the file .../openssl/bin/libcrypto-1.1.dll to
# libcrypto.dll.  Please contribute a solution that does not require
# this step.

CC = "C:/Program Files/mingw64/bin/gcc.exe"

CCFLAGS = -Wall \
          -Wnested-externs -ggdb -O0 -c \
          -DTPM_WINDOWS \
          -D__USE_MINGW_ANSI_STDIO \
          -DRADIX_BITS=64 \
          -I"c:/program files/mingw64/include" \
          -I"C:/Program Files/OpenSSL/include" \
          -I.

LNFLAGS = -D_MT \
          -DTPM_WINDOWS \
          -DRADIX_BITS=64 \
          -I. \
          -ggdb \
          -L.

# Shining Light OpenSSL 1.1 32-bit

LNLIBS = -L"E:/evi" -lcrypto  -lws2_32

all: tpm_server.exe

CRYPTO_SUBSYSTEM = openssl
include makefile-common

OBJFILES = ACTCommands.o ACT_spt.o AlgorithmCap.o AlgorithmTests.o AsymmetricCommands.o Attest_spt.o \
           AttestationCommands.o AuditCommands.o Bits.o BnConvert.o BnMath.o BnMemory.o Cancel.o \
           CapabilityCommands.o Clock.o ClockCommands.o CommandAudit.o CommandCodeAttributes.o \
           CommandDispatcher.o ContextCommands.o Context_spt.o CryptDes.o CryptCmac.o CryptEccData.o \
           CryptEccKeyExchange.o CryptEccMain.o CryptEccSignature.o CryptHash.o CryptPrime.o \
           CryptPrimeSieve.o CryptRand.o CryptRsa.o CryptSelfTest.o CryptSmac.o CryptSym.o CryptUtil.o \
           DA.o DebugHelpers.o DictionaryCommands.o DuplicationCommands.o EACommands.o EncryptDecrypt_spt.o \
           Entity.o Entropy.o EphemeralCommands.o ExecCommand.o Global.o Handle.o HashCommands.o Hierarchy.o \
           HierarchyCommands.o IoBuffers.o IntegrityCommands.o Locality.o LocalityPlat.o ManagementCommands.o \
           Manufacture.o Marshal.o MathOnByteBuffers.o Memory.o NVCommands.o NVDynamic.o NVMem.o NVReserved.o \
           NV_spt.o Object.o ObjectCommands.o Object_spt.o PCR.o PP.o PPPlat.o PlatformACT.o PlatformData.o \
           Policy_spt.o Power.o PowerPlat.o PrimeData.o PropertyCap.o RandomCommands.o Response.o \
           ResponseCodeProcessing.o RsaKeyCache.o RunCommand.o Session.o SessionCommands.o SessionProcess.o \
           SigningCommands.o StartupCommands.o SymmetricCommands.o TPMCmdp.o TPMCmds.o TestingCommands.o \
           Ticket.o Time.o TpmAsn1.o TpmFail.o TpmSizeChecks.o TpmToOsslDesSupport.o TpmToOsslMath.o \
           TpmToOsslSupport.o Unique.o Unmarshal.o Vendor_TCG_Test.o X509_ECC.o X509_RSA.o X509_spt.o ntc2lib.o \
           ntc2.o TcpServer.o

.PHONY: clean debug

tpm_server.exe: $(OBJFILES) applink.o
    $(CC) $(LNFLAGS) $(OBJFILES) -o $@ applink.o $(LNLIBS)

debug:
    @echo "OBJFILES=$(OBJFILES)"
    @echo "LNLIBS=$(LNLIBS)"

clean:
    rm -f *.o *.exe

求帮我如何解决

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-07-02 14:22
    关注

    引自免费微信小程序:皆我百晓生

    这个错误是由于Makefile中存在多个目标模式导致的。在Makefile中,每个目标模式应该只对应一个目标文件。错误提示中的“multiple target patterns”意味着在Makefile的某个位置有多个目标模式定义,这会导致make工具无法正确解析并产生混淆。

    从您提供的Makefile内容来看,问题可能出现在tpm_server.exe的目标定义上。在这一部分,您列出了很多对象文件(OBJFILES中的文件),但是在规则中并没有明确指定这些对象文件是如何生成的。正常情况下,一个目标(例如tpm_server.exe)应该依赖于一些对象文件(如.o文件),而这些对象文件应该是从源文件(如.c.cpp文件)编译得到的。您的Makefile应该包含从这些源文件编译到对象文件的规则。

    为了解决此问题,您需要确保每个目标都依赖于正确的源文件,并且定义了如何从源文件编译得到对象文件的规则。这里是一个简单的例子,展示了如何为单个源文件定义编译规则:

    %.o: %.c
        $(CC) $(CCFLAGS) -c $< -o $@
    

    上述规则表示所有的.o文件都依赖于对应的.c文件,并且使用指定的编译器和编译选项从.c文件编译得到.o文件。您需要根据您的实际情况调整这个规则。

    对于您的Makefile,您需要为每个对象文件(在OBJFILES中列出)创建一个类似的规则,并确保这些规则都是针对.c.cpp文件的。然后,您可以尝试重新运行make命令看看是否解决了问题。如果仍然存在问题,请提供更多的上下文信息,以便我能更准确地帮助您解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月2日