2012-03-06 10 views
2

新しいディレクトリの下に新しいファイルを追加したサンプルコードをコンパイルしようとしていますが、依存関係の問題が続いています。 "/ interface"の下にファイル "ipc.c"を追加しました。 "srcs"にソースファイルを追加し、 "-I/interface"というディレクトリを追加しました。次のように のMakefileに見える:Makefile depencyの問題

# 
# ======== Makefile ======== 
# 


include ../products.mak 


srcs = main_host.c interface/ipc.c 


objs = $(addprefix bin/$(PROFILE)/obj/,$(patsubst %.c,%.o$(SUFFIX),$(srcs))) 
libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_$(PROFILE) 



MAKEVARS = \ 
SYSLINK_INSTALL_DIR=$(SYSLINK_INSTALL_DIR) \ 
PKGPATH=$(PKGPATH) 

all: 
@$(ECHO) "!" 
@$(ECHO) "! Making [email protected] ..." 
$(MAKE) $(MAKEVARS) PROFILE=debug SUFFIX=v5T togs2_host 
$(MAKE) $(MAKEVARS) PROFILE=release SUFFIX=v5T togs2_host 

install: 
@$(ECHO) "#" 
@$(ECHO) "# Making [email protected] ..." 
@$(MKDIR) $(INSTALL_DIR)/debug 
$(CP) bin/debug/togs2_host $(INSTALL_DIR)/debug 
@$(MKDIR) $(INSTALL_DIR)/release 
$(CP) bin/release/togs2_host $(INSTALL_DIR)/release 

clean:: 
$(RMDIR) bin 


# 
# 
# ======== rules ======== 
# 
togs2_host: bin/$(PROFILE)/togs2_host 
bin/$(PROFILE)/togs2_host: $(objs) $(libs) 
@$(ECHO) "##" 
@$(ECHO) "## Making [email protected] ..." 
$(LD) $(LDFLAGS) -o [email protected] $^ $(LDLIBS) 



bin/$(PROFILE)/obj/%.o$(SUFFIX): %.h 
bin/$(PROFILE)/obj/%.o$(SUFFIX): %.c 
@$(ECHO) "###" 
@$(ECHO) "### Making [email protected] ..." 
$(CC) $(CPPFLAGS) $(CFLAGS) -o [email protected] $< 


# ======== create output directories ======== 
ifneq (clean,$(MAKECMDGOALS)) 
ifneq (,$(PROFILE)) 
ifeq (,$(wildcard bin/$(PROFILE))) 
$(shell $(MKDIR) -p bin/$(PROFILE)) 
endif 
ifeq (,$(wildcard bin/$(PROFILE)/obj)) 
$(shell $(MKDIR) -p bin/$(PROFILE)/obj) 
endif 
endif 
endif 

# ======== install validation ======== 
ifeq (install,$(MAKECMDGOALS)) 
ifeq (,$(INSTALL_DIR)) 
$(error must specify INSTALL_DIR) 
endif 
endif 

# ======== toolchain macros ======== 
ifeq (v5T,$(SUFFIX)) 
CC = $(CS_ARM_INSTALL_DIR)gcc -c -MD -MF [email protected] -march=armv5t 
AR = $(CS_ARM_INSTALL_DIR)ar cr 
LD = $(CS_ARM_INSTALL_DIR)gcc 

CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \ 
-Dxdc_target_types__=gnu/targets/arm/std.h 

CFLAGS = -Wall -ffloat-store -fPIC -Wunused -Dfar= $(CCPROFILE_$(PROFILE)) \ 
-I. -I/interface $(addprefix -I,$(subst +, ,$(PKGPATH))) 

LDFLAGS = $(LDPROFILE_$(PROFILE)) -Wall -Wl,[email protected] 
LDLIBS = -lpthread -lc 

CCPROFILE_debug = -ggdb -D DEBUG 
CCPROFILE_release = -O3 -D NDEBUG 

LDPROFILE_debug = -ggdb 
LDPROFILE_release = -O3 
endif 

私はこのエラーを取得しておいてください。 致命的なエラー:開く依存ファイルのbin /デバッグ/ OBJ /インターフェース/ ipc.ov5T.dep:そのようなファイルやディレクトリはありません

をこれはproducts.makがどのように見えるかです:

# 
# ======== products.mak ======== 
# 

DEPOT = /opt 

BIOS_INSTALL_DIR  = $(DEPOT)/bios_6_33_01_25 
IPC_INSTALL_DIR   = $(DEPOT)/ti/ipc_1_23_05_40 
SYSLINK_INSTALL_DIR  = $(DEPOT)/syslink_2_10_02_17 
TI_C6X_INSTALL_DIR  = $(DEPOT)/ti/ccsv5/tools/compiler/c6000 
CS_ARM_INSTALL_DIR  = $(DEPOT)/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi- 
XDC_INSTALL_DIR   = $(DEPOT)/xdctools_3_23_00_32 


PKGPATH := $(SYSLINK_INSTALL_DIR)/packages 
PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages 
PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages 
PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages 
PKGPATH := $(PKGPATH)+$ 


# Use this goal to print your product variables. 
.show-products: 
    @echo "BIOS_INSTALL_DIR   = $(BIOS_INSTALL_DIR)" 
    @echo "IPC_INSTALL_DIR   = $(IPC_INSTALL_DIR)" 
    @echo "SYSLINK_INSTALL_DIR  = $(SYSLINK_INSTALL_DIR)" 
    @echo "TI_ARM_INSTALL_DIR  = $(TI_ARM_INSTALL_DIR)" 
    @echo "TI_C6X_INSTALL_DIR  = $(TI_C6X_INSTALL_DIR)" 
    @echo "CS_ARM_INSTALL_DIR  = $(CS_ARM_INSTALL_DIR)" 
    @echo "XDC_INSTALL_DIR   = $(XDC_INSTALL_DIR)" 


# ======== standard macros ======== 
ifneq (,$(wildcard $(XDC_INSTALL_DIR)/bin/echo.exe)) 
    # use these on Windows 
    CP  = $(XDC_INSTALL_DIR)/bin/cp 
    ECHO = $(XDC_INSTALL_DIR)/bin/echo 
    MKDIR = $(XDC_INSTALL_DIR)/bin/mkdir -p 
    RM  = $(XDC_INSTALL_DIR)/bin/rm -f 
    RMDIR = $(XDC_INSTALL_DIR)/bin/rm -rf 
else 
    # use these on Linux 
    CP  = cp 
    ECHO = echo 
    MKDIR = mkdir -p 
    RM  = rm -f 
    RMDIR = rm -rf 
endif 

私は単純に拡張しているコード例のとおり、Makefileを完全に理解していません。

ほとんどのヘルプが役立ちます。

ロルフ Cdltd

+0

あなたは私たちにすべての問題を示しているわけではありません。一番上に、このmakefileには '../ products.mak'というファイルがあります。そのファイルには、各オブジェクトファイルの '.dep'ファイルが含まれていますが、追加したファイルが正しいディレクトリにない(または間違ったディレクトリにファイルを追加したと言うこともできます) 。 – eriktous

+0

StackO Aberdeen Meetup 2012:詳細は[SO Meetup Link](http://www.meetup.com/stackoverflow/Aberdeen-GB/653922/#comment1228022)を参照してください。あなたはアバディーンに拠点を置いているのを見て、出席しようとしてください。明日このコメントを削除します。申し訳ありませんが、SOに連絡する他の方法はありません。 – bPratik

答えて

0

このMakefileは、かなり複雑なので、当て推量の一定量が必要であるが、私はトラブルはそれがinterface/ipc.cを見つける方法を知っていないということだと思います。この行を最下部に追加してヘルプが表示されるかどうか確認してください。

もしそうでなければ、私たちはいくつかのことを試すことができます。 (もしそうなら、私はmakefileを単純化するいくつかの方法を提案することができます)。

+0

Makefileの一番下に追加された行はまだ動作しません。 – Onklen

+0

@Onklen、これは変です。 '.dep'ファイルがまったく含まれていないことは、私たちに示したものには何もありません。問題を簡略化し、メイクファイルを減らして試してみてください。どのOSを使用していますか? – Beta

+0

私はUbuntu 11.10を使用しています。私はOMAPL138チップ用にクロスコンパイルしています。 – Onklen

6

それは働いています。

出力ディレクトリを作成するためのルールを追加する必要があります。 は、だから私はレコードの

ifeq (,$(wildcard bin/$(PROFILE)/obj/interface)) 
$(shell $(MKDIR) -p bin/$(PROFILE)/obj/interface) 
endif 
7

を追加しました:エラー「致命的なエラー:開く依存ファイル[...]:そのようなファイルやディレクトリはありませんが、」あまりにも長いパスによって引き起こされる場合があります。 Cygwin/Windowsで、200文字以上のパス(正確にチェックしていない)で私に起こった。