首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将生成文件设置导入VS2005集成开发环境

将生成文件设置导入VS2005集成开发环境
EN

Stack Overflow用户
提问于 2009-07-01 06:39:36
回答 1查看 2.2K关注 0票数 0

在这个广阔的编程世界里,我是一个新手。我得到了一些用C语言编写的代码,这些代码是使用makefile编译和链接的。我可以使用VS2005中的nmake来编译代码。现在,我想在C++ VS2005集成开发环境中构建程序。通过快速的google搜索,似乎没有自动功能将makefile设置导入到VS IDE中。

我尝试将makefile中声明的所有必要依赖项(头文件和库文件)包含到VS中,但我得到了许多链接错误。我甚至不确定从哪里开始解决这个问题。我希望上师能帮助我。

这是makefile的内容:

代码语言:javascript
复制
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

在VS中,我已经:

1创建新的空项目

2添加现有源文件(c文件和头文件)

3其他包含目录:..../include和..../src/make7

4个附加库目录:..../lib

5生成项目...

在尝试构建之后,我在VS输出中得到了74个链接器错误。所有这些都是未解决的外部符号错误示例:

代码语言:javascript
复制
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

我以前没有处理过makefile。我很抱歉,如果这篇文章听起来很新手的风格和业余的。我是新手,但我愿意学习。

任何建议和评论都是非常感谢的。

jjplaw

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-01 08:03:10

如果我是您,在IDE中迁移构建之前,我会三思而后行。我知道这对你来说似乎更舒服,但内置的建筑设施真的很有限。

Visual Studio的内置构建系统不能扩展!当你的项目达到一定的规模时,它就成了最大的障碍。微软认识到了这一事实,目前正在推动他们名为MSBuild的替代方案。

当您的解决方案包含超过80个不同的子项目时,尝试修改编译选项...这是一个耗子循环的盛会,单调乏味,容易出错...

此时,您将有以下选项:

  1. 手动编辑项目文件(仍然需要大量来自description.
  2. Integrate的
    1. 解决方案,这是集成开发环境中的替代构建系统(如果存在)。
    2. 使用更完善的外部构建系统并从集成开发环境调用它(您也有机会成为跨平台)。

这些是make变体(构建是由Makefiles或类似文件驱动的):

  • nmake:可能是功能最弱的,仅限windows的(sucks)
  • gmake:
  • OMake:跨平台(sucks)
  • gmake:跨平台(从未使用过)
  • CMake:跨平台(从未使用过)
  • Rake:跨平台windows跨平台,但预计windows上的路径会出现问题(来自nix世界)

<代码>F225

这些是ant的变体(构建是由xml描述驱动的,而不是makefile):

  • nant
  • MSBuild (来自微软)

无论如何,请记住,在集成开发环境外编译不会阻止您使用它进行编辑、调试(而且调试器很棒)等等!

关于您的问题,您忘记添加以下摘录中列出的库:

代码语言:javascript
复制
TAMLIB      = $(LIBDIR)\tam_$(NAMETAG).lib
TAMCLIB     = $(LIBDIR)\tamc_$(NAMETAG).lib
MMSLIB      = $(LIBDIR)\mmsc_$(NAMETAG).lib
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1067594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档