Lex生成的源文件 导入到vc++中 产生的 编译问题

Lex生成的源文件 导入到vc++中 产生的 编译问题,第1张

我查了一下, 感觉是不是你在VC++里一些设置步骤还没做?

在安装了Parser Generator后,执行以下步骤,即可使VC++编译和连接由Parser

Generator产生的文件

1.目录设置

在VC++中执行以下步骤,每个步骤只执行一次。

(1)

选择Tools菜单中的Options命令,在屏幕上即会出现Options对话框。

(2)

选择Directories选项卡。

(3)

在Show Directories for下拉列表框中选择Include Files。

(4)

在Directories框中,点击最后的空目录,并填入Parser Generator的include

子目录的路径

(5)

在Show Directories for下拉列表框中选择Library Files。

(6)

在Directories框中,点击最后的空目录,并填入Parser Generator的

lib\\msdev子目录的路径。

(7)

在Show Directories for下拉列表框中选择Source Files。

(8)

在Directories框中,点击最后的空目录,并填入Parser Generator的Source

子目录的路径。

(9)

点击OK按钮,Options对话框将接受设置并关闭。

VC++在就可以找到包含文件yacc.h和lex.h以及YACC和Lex的库文件。

2.项目设置

对于每个VC++项目,都需在VC++中执行以下步骤:

(1)

选择Project菜单中的Settings命令,在屏幕上即会出现Project Settings对

话框。

(2)

在Settings for下拉列表框中选择Win32 Debug。

(3)

选择C/C++标签。

(4)

在Category下拉列表框中选择General。

(5)

在Preprocessor Definitions框中,在当前文本的最后,输入YYDEBUG。

(6)

选择Link标签。

(7)

在Category下拉列表框中选择General。

(8)

在Object/Library Modules框中,在当前文本的后面,输入yld.lib //这里好象实际使用中不包括后面两个库

ylmtd.lib ylmtdlld.lib。

(9)

在Settings for下拉列表框中选择Win32 Release。

(10)

重复第8步的工作。

(11)

点击OK按钮,Project Settings对话框将接受设置并关闭。

VC++现在可以从特定的库中接受YACC和Lex所需的函数和变量。

3.应用

(1)在Parser Generator下的编辑窗口输入YACC源程序(扩展名必须为.y)。

(2)用Parser Generator下的Project菜单的Compile file命令编译源程序,生成相应的C

语言源程序(.cpp)。

(3)用VC++编译,连接C语言源程序,生成可执行程序(.exe)后即可执行。

下面是Makefile中一些约定俗成的目标名称及其含义:

all

编译整个软件包,但不重建任何文档。一般此目标作为默认的终极目标。此目标一般对所有源程序的编译和连接使用"-g"选项,以使最终的可执行程序中包含调试信息。可使用 strip 程序去掉这些调试符号。

clean

清除当前目录下在 make 过程中产生的文件。它不能删除软件包的配置文件,也不能删除 build 时创建的那些文件。

distclean

类似于"clean",但增加删除当前目录下的的配置文件、build 过程产生的文件。

info

产生必要的 Info 文档。

check 或 test

完成所有的自检功能。在执行检查之前,应确保所有程序已经被创建(但可以尚未安装)。为了进行测试,需要实现在程序没有安装的情况下被执行的测试命令。

install

完成程序的编译并将最终的可执行程序、库文件等拷贝到指定的目录。此种安装一般不对可执行程序进行 strip *** 作。

install-strip

和"install"类似,但是会对复制到安装目录下的可执行文件进行 strip *** 作。

uninstall

删除所有由"install"安装的文件。

installcheck

执行安装检查。在执行安装检查之前,需要确保所有程序已经被创建并且被安装。

installdirs

创建安装目录及其子目录。它不能更改软件的编译目录,而仅仅是创建程序的安装目录。

下面是 Makefile 中一些约定俗成的变量名称及其含义:

这些约定俗成的变量分为三类。第一类代表可执行程序的名字,例如 CC 代表编译器这个可执行程序;第二类代表程序使用的参数(多个参数使用空格分开),例如 CFLAGS 代表编译器执行时使用的参数(一种怪异的做法是直接在 CC 中包含参数);第三类代表安装目录,例如 prefix 等等,含义简单,下面只列出它们的默认值。

AR 函数库打包程序,可创建静态库.a文档。默认是"ar"。

AS 汇编程序。默认是"as"。

CC C编译程序。默认是"cc"。

CXX C++编译程序。默认是"g++"。

CPP C/C++预处理器。默认是"$(CC) -E"。

FC Fortran编译器。默认是"f77"。

PC Pascal语言编译器。默认是"pc"。

YACC Yacc文法分析器。默认是"yacc"。

ARFLAGS 函数库打包程序的命令行参数。默认值是"rv"。

ASFLAGS 汇编程序的命令行参数。

CFLAGS C编译程序的命令行参数。

CXXFLAGS C++编译程序的命令行参数。

CPPFLAGS C/C++预处理器的命令行参数。

FFLAGS Fortran编译器的命令行参数。

PFLAGS Pascal编译器的命令行参数。

YFLAGS Yacc文法分析器的命令行参数。

LDFLAGS 链接器的命令行参数。

prefix /usr/local

exec_prefix $(prefix)

bindir $(exec_prefix)/bin

sbindir $(exec_prefix)/sbin

libexecdir $(exec_prefix)/libexec

datadir $(prefix)/share

sysconfdir $(prefix)/etc

sharedstatedir $(prefix)/com

localstatedir $(prefix)/var

libdir $(exec_prefix)/lib

infodir $(prefix)/info

includedir $(prefix)/include

oldincludedir $(prefix)/include

mandir $(prefix)/man

srcdir 需要编译的源文件所在的目录,无默认值

pro文件里的相对路径不全都是相对于pro文件的,有的是,有的不是。

1、一种情况下./表示.pro文件所在的目录;另一种情况下./表示构建生成目录;

1.1.是的情况

SOURCE

FORMS

HEADERS

INCLUDEPATH

DEPENDPATH 等等

这些变量中使用的./指的是.pro文件所在的目录

1.2.不是的情况

DESTDIR

OBJECTS_DIR

MOC_DIR

RCC_DIR

UI_DIR

UI_HEADERS_DIR

UI_SOURCES_DIR

win32:CONFIG(debug)

win32:CONFIG(release) 等等

这些变量中使用的./指的是构建生成目录。

2、影子构造说明

如果没有选择影子构造(shadow build),构建生成目录和.pro文件所在目录是同一个目录;

如果指定了shadow build,且指定了构建生成目录,那构建目录和.pro文件所在目录就不是同一个。

我们默认是会选择shadow build的,所以构建目录≠.pro目录。

3、subdirs:多工程多目录的情况

它们的相对路径都是针对你项目下的构建目录+子项目文件夹来的,例如

TEMPLATE = subdirs

SUBDIRS = \

muparser \

librecad

CONFIG += order

那么构建目录,BuildPath假如是F:\CADCAM\QCAD\src\build-LibreCAD-v1.0.4-qt4-Desktop_Qt_4_8_7_MSVC2010_32bit-Debug

于是,相对路径和绝对路径的对应关系,分别是:

---举例1---

相对,DESTDIR = bin

绝对,DESTDIR =$${BuildPath}/muparser/bin

绝对,DESTDIR =$${BuildPath}/librecad/bin

---举例2---

相对,DESTDIR = ../bin

绝对,$${BuildPath}/bin

4、.pro文件打印输出

在.pro文件,添加message函数,保存,会在“编译输出”窗口,打印出结果。

message($$PROJECT_ROOT)

message($$PWD)

message($$DESTDIR)

message($$TARGET)

Project MESSAGE: F:/CADCAM/QCAD/src/LibreCAD-v1.0.4-qt4/muparser

Project MESSAGE: F:/CADCAM/QCAD/src/LibreCAD-v1.0.4-qt4/muparser

Project MESSAGE: ../bin/lib

Project MESSAGE: muparserd

5、.pro常用的宏定义

TEMPLATE = app

HEADERS:需要包含的头文件的列表。

SOURCES:需要的源文件的列表。

FORMS:需要的.ui文件的列表。

LEXSOURCES:所有lex源文件的列表。

YACCSOURCES:所有yacc源文件的列表。

TARGET:可执行应用程序的名称。默认值为项目文件的名字。

DESTDIR:放置可执行程序目标的目录。

OBJECTS_DIR:放置obj中间文件的目录。

MOC_DIR: moc转换文件路径。

RCC_DIR: 资源文件路径。

UI_DIR:ui文件转换的路径。

RESOURCES:需要包含的资源文件。

LIBS:依赖库的路径和名称 -L{xxdirxx} -l{xxnamexx}。

LIBEXT: 产生lib的后缀。

DEFINES:应用程序所需的额外的宏定义列表。

INCLUDEPATH:应用程序所需的额外的包含路径列表。

DEPENDPATH:应用程序所依赖的搜索路径。

VPATH:寻找补充文件的搜索路径。

DEF_FILE:只有Windows需要:应用程序所要连接的.def文件。

RC_FILE:只有Windows需要:应用程序的资源文件。

RES_FILE:只有Windows需要:应用程序所要连接的资源文件。

TRANSLATIONS: 多国语言支持文件。

INSTALLS: 要安装的文件。

target.path: 安装的路径。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7885008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存