2009-07-01 6 views
0

私はプログラミングのこの巨大な世界で初心者です。私はC言語でいくつかのコードを与えられていますが、&がmakefileを使ってリンクされています。 VS2005のnmakeを使ってコードをコンパイルできます。今私はC + +のVS2005のIDEでプログラムを構築したい。 すばらしいGoogle検索から、Makefile設定をVS IDEにインポートする際に自動化された機能がないようです。Makefileの設定をVS2005 IDEにインポートする

メイクファイルに記載されている必要な依存関係(ヘッダとlibファイル)をVSに書き込もうとしましたが、多くのリンクエラーが発生しました。私はこの問題を解決するためにどこを探し始めるべきかについてもさえわかりません。私は指導者が私を助けてくれることを願っています。

これは、メイクファイルの内容である:私はVSで

BASE  = ..\.. 
!include $(BASE)\compiler.mak 
!include $(BASE)\options.mak                

CFLAGS  = 

# Define the string used in the executable file name 
STACK_DEF = $(TCP_DEF) 

!ifdef TCP_DEF 
STACKS  = tcp 
!endif 

CDEFS  = $(STACK_DEF) $(AUTH_DEF) $(CLIENT_DEF) $(FILESERVICE_DEF) 

TARGET  = $(STACKS)$(NAMETAG).$(EXESUFFIX) 

GOMDIR  = $(BASE)\src\classlib 
DIRMAKE  = $(BASE)\src\make7 
LIBDIR  = $(BASE)\lib 
OBJDIR  = obj_$(NAMETAG) 
EXEDIR  = $(BASE)\exes 
USERINC  = $(BASE)\include 

# These libraries are always included 
TAMLIB  = $(LIBDIR)\tam_$(NAMETAG).lib 
TAMCLIB  = $(LIBDIR)\tamc_$(NAMETAG).lib 
MMSLIB  = $(LIBDIR)\mmsc_$(NAMETAG).lib 

# Optional libraries 
!ifdef FILESERVICE_DEF 
FILELIB  = $(LIBDIR)\file_$(NAMETAG).lib 
!endif 

!ifdef TCP_DEF 
TCPLIB  = $(LIBDIR)\1006_$(NAMETAG).lib 
TCPINC  = $(USERINC)\rfc1006.h 
!endif 

!ifdef CLIENT_DEF 
CLILIB  = $(LIBDIR)\cli_$(NAMETAG).lib 
TCLILIB  = $(LIBDIR)\tcli_$(NAMETAG).lib 
CLIINC  = $(USERINC)\cliapi.h $(USERINC)\cli_cfg.h 
!endif 

SCLLIB  = $(LIBDIR)\cscl_$(NAMETAG).lib 

LIBS  = $(TCPLIB) $(TCLILIB) $(CLILIB) \ 
      $(TAMLIB) $(TAMCLIB) $(MMSLIB) $(FILELIB) $(SCLLIB) 

INCLUDES = $(TCPINC) $(CLIINC) 

CC   = $(COMPILER) 
INCFLAGS = /I$(DIRMAKE) /I$(USERINC) 

SRC   = conmain.c \ 
      state.c \ 
      scl_cli.c 

OBJ   = $(OBJDIR)\$(STACKS)main.$(OBJSUFFIX) \ 
      $(OBJDIR)\state.$(OBJSUFFIX) \ 
      $(OBJDIR)\scl_cli.$(OBJSUFFIX) 

all:  $(TARGET) 

install: all 

clean: 
     $(DELETE) $(OBJDIR)\$(STACKS)main.$(OBJSUFFIX) 
     $(DELETE) $(OBJDIR)\state.$(OBJSUFFIX) 
     $(DELETE) $(OBJDIR)\scl_cli.$(OBJSUFFIX) 
     $(DELETE) $(TARGET) 

clobber: clean 

$(TARGET):  $(OBJ) $(LIBS) 
     $(LINK) $(LINKOUT)$(TARGET) @<< 
    $(OBJDIR)\$(STACKS)main.$(OBJSUFFIX) 
    $(OBJDIR)\state.$(OBJSUFFIX) 
    $(OBJDIR)\scl_cli.$(OBJSUFFIX) 
    $(LIBS) 
    $(WINDIS) $(SOCKLIB) $(REGLIB) 
<<NOKEEP 

$(OBJDIR)\$(STACKS)main.$(OBJSUFFIX): \ 
     conmain.c \ 
     database.h \ 
     services.h \ 
     scl_cli.h \ 
     $(USERINC)\uca_time.h \ 
     $(DIRMAKE)\tamvend.h \ 
     $(USERINC)\tam.h \ 
     $(USERINC)\tam_tp.h \ 
     $(USERINC)\tam_con.h \ 
     $(USERINC)\casm.h \ 
     $(DIRMAKE)\clivend.h \ 
     $(USERINC)\cliapi.h \ 
     $(DIRMAKE)\mmsdapi.h $(INCLUDES) 
     $(CC) $(INCFLAGS) $(CFLAGS) @<< 
      $(CDEFS) 
      $(COMPOUT)$(OBJDIR)\$(STACKS)main.$(OBJSUFFIX) 
      conmain.c 
<<NOKEEP 

$(OBJDIR)\scl_cli.$(OBJSUFFIX): \ 
     scl_cli.c \ 
     scl_cli.h \ 
     database.h \ 
     services.h \ 
     $(USERINC)\uca_time.h \ 
     $(DIRMAKE)\tamvend.h \ 
     $(USERINC)\tam.h \ 
     $(USERINC)\tam_tp.h \ 
     $(USERINC)\tam_con.h \ 
     $(USERINC)\casm.h \ 
     $(DIRMAKE)\clivend.h \ 
     $(USERINC)\cliapi.h \ 
     $(DIRMAKE)\mmsdapi.h $(INCLUDES) 
     $(CC) $(INCFLAGS) $(CFLAGS) @<< 
      $(CDEFS) 
      $(COMPOUT)$(OBJDIR)\scl_cli.$(OBJSUFFIX) 
      scl_cli.c 
<<NOKEEP 

$(OBJDIR)\state.$(OBJSUFFIX): \ 
     state.c \ 
     scl_cli.h \ 
     database.h \ 
     services.h \ 
     $(USERINC)\uca_time.h \ 
     $(DIRMAKE)\tamvend.h \ 
     $(USERINC)\tam.h \ 
     $(USERINC)\tam_tp.h \ 
     $(USERINC)\tam_con.h \ 
     $(USERINC)\casm.h \ 
     $(DIRMAKE)\clivend.h \ 
     $(USERINC)\cliapi.h \ 
     $(DIRMAKE)\mmsdapi.h $(INCLUDES) 
     $(CC) $(INCFLAGS) $(CFLAGS) @<< 
      $(CDEFS) 
      $(COMPOUT)$(OBJDIR)\state.$(OBJSUFFIX) 
      state.c 
<<NOKEEP 

ました:
[1]新しい空のプロジェクト
は、[2]のソース(Cファイルとヘッダファイル)
をexisiting追加作成します。 [3]の追加は、インクルードディレクトリ:....// srcに/ make7
[4]追加のライブラリディレクトリ....含めると:
..../libに[5]プロジェクトをビルド...

ビルドしようとした後、VS出力に74のリンカエラーがあります。すべての未解決の外部シンボルエラー 例です:

scl_cli.obj : error LNK2019: unresolved external symbol _TAM_parse_address referenced in function _ResolveServerAddressscl_cli.obj : error LNK2019: unresolved external symbol _TAM_parse_address referenced in function _ResolveServerAddress 
conmain.obj : error LNK2001: unresolved external symbol _MMSd_freeDsMemFunction 

私は前にメイクファイルを扱っていませんでした。私はこの投稿が非常に初心者のスタイルとamatuer-ishと聞こえるかもしれない場合は謝罪します。私は新しいですが、私は喜んで学びます。

何かアドバイスやコメントをいただければ幸いです。

jjplaw

答えて

0

私があなただったら、私はIDE内でのビルドを移行する前に二度考えるだろう。私はそれがあなたにとってより快適だと理解していますが、ビルド施設は実際には限られています。

Visual Studioのビルトインビルドシステムは縮尺されていません!あなたのプロジェクトが一定の大きさに達すると、それは他の何よりも妨げになります。マイクロソフトはこの事実を認識し、現在のところMSBuildと呼ばれる代替製品を求めています。

すると、以下のオプションがあります。この時点で

...退屈でエラーが発生しやすく、それが催しマウスclicクリックです...あなたのソリューションは、80種類以上のサブプロジェクトが含まれている場合、コンパイルオプションを変更してください

  1. プロジェクトファイルを手作業で編集する(依然として非常にたくさんのファイルがあります)。
  2. 説明からVisual Studioソリューションを生成する。
  3. IDE内に代替ビルドシステムを統合します(存在する場合)。
  4. より適切な外部ビルドシステムを使用し、IDEから呼び出す(クロスプラットフォームになる機会も得られる)。

これらの変種(ビルドがMakefileのまたは類似によって駆動される)を作成している:

  • NMAKE:おそらく最も強力な、Windowsのみ
  • OMakeの:
  • のscons(ナイス)、クロスプラットフォーム:
  • CMake:クロスプラットフォーム(決して使用しない)
  • Rake:クロスプラットフォーム(吸盤)
  • クロスプラットフォームが、Windows上のパスの問題を期待して(「nixの世界から来ている)

これらは、アリのバリアント(ビルドが代わりのmakefileのXML記述によって駆動される)です:

  • NAntのgmakeのは3210
  • (マイクロソフトから)のMSBuildとにかく

、IDE外でコンパイルするないがためにそれを使用してからあなたを防ぐことはないことを覚えておいてください編集、デバッグ(そしてデバッガがうまくいく)などです!

あなたの問題については、次の抜粋に記載されているライブラリを追加するのを忘れ:

TAMLIB  = $(LIBDIR)\tam_$(NAMETAG).lib 
TAMCLIB  = $(LIBDIR)\tamc_$(NAMETAG).lib 
MMSLIB  = $(LIBDIR)\mmsc_$(NAMETAG).lib 
+0

を私はVS 2005 C用に設定DDKで上記のコードを統合しなければならないので、私は、VS IDEに移行するように言われました++ 。オプション4は非常に面白いです。私はこれにgoogleする必要があります。それは私がVS IDEからのメイクファイルを読んで、exeをビルドするためにOMAKE(例えば)を呼び出すことができるということですか? それとも、別のビルドシステムを使用していますか?それはmakefileを使用せず、私はIDEにコンパイラとリンカのオプションを入力しましたか? – justin

+0

「IDEの外部でコンパイルしてもデバッグに使用できないわけではありません。ブレークポイントを使用して時計を設定することはできますか? – justin

+0

@justin、コメント2:IDEを使用して任意のプログラムをデバッグできます。あなたはC++プログラムやライブラリのためのソリューションから始め、デバッグ設定(パス、コマンドラインオプション、ソースディレクトリ)を入力するだけです。 – bltxd

関連する問題