我正在尝试编译Z3版本4.1.2。在成功配置之后,当您执行“make”时,我收到以下错误:
Makefile:151: lib.srcs: No such file or directory
Makefile:152: shell.srcs: No such file or directory
Makefile:153: test.srcs: No such file or directory
Making test.srcs...
/usr/local/bin/dos2unix takes only stdin and stdout
make: *** [test.srcs] Error 1
答案 0 :(得分:3)
我认为问题是z3-src-4.1.2.zip
中的所有文本文件都使用“回车”(cr)和“换行”(lf)来编码行终止。该zip是在Windows机器上创建的。另一个问题是“dos2unix”应用程序。它是一个将windows / dos文本文件转换为unix / linux / osx文本文件的应用程序。这是一个非常简单的应用程序。它只是用一个lf替换cr / lf。
在Linux上,此应用程序只接受一个参数:要修改的文件名。
我目前正在开发一个可以避免此问题的新构建系统。与此同时,这里有一些解决方法。
1)使用git检索源。 git将负责cr / lf vs lf问题。 这是检索Z3的命令:
git clone https://git01.codeplex.com/z3
如果您这样做,则无需使用dos2unix。 因此,您可以在Makefile.in中删除@ $(DOS2UNIX)行。另一种选择是更换 DOS2UNIX的= @ D2U @ 同 DOS2UNIX的触摸= 在Makefile.in
的开头完成这些更改后,您应该能够在OSX上编译它。我在OSX 10.7上成功编译了它。
2)获取“不稳定”分支。
http://z3.codeplex.com/SourceControl/changeset/view/946a06cddbe4
这是目前的“工作分支”。它包含新的构建系统。它没有准备好,但它足以生成Z3可执行文件。以下是使用此分支构建Z3的说明
从上面的页面下载代码。或者使用git来检索“不稳定”分支。然后,执行
autoconf
./configure
python scripts/mk_make.py
cd build
make
我设法在上周五在OSX 10.7上编译它。
3)保留.zip,但转换所有文本文件。我正在使用以下python脚本来转换新构建系统中的所有文件。如果在Z3根目录中执行此python脚本,它将转换所有文件。
import os
import glob
import re
import getopt
import sys
import shutil
def is_cr_lf(fname):
# Check whether text files use cr/lf
f = open(fname, 'r')
line = f.readline()
sz = len(line)
return sz >= 2 and line[sz-2] == '\r' and line[sz-1] == '\n'
# dos2unix in python
# cr/lf --> lf
def dos2unix(fname):
if is_cr_lf(fname):
fin = open(fname, 'r')
fname_new = '%s.new' % fname
fout = open(fname_new, 'w')
for line in fin:
line = line.rstrip('\r\n')
fout.write(line)
fout.write('\n')
fin.close()
fout.close()
shutil.move(fname_new, fname)
if is_verbose():
print "dos2unix '%s'" % fname
def dos2unix_tree_core(pattern, dir, files):
for filename in files:
if fnmatch(filename, pattern):
fname = os.path.join(dir, filename)
if not os.path.isdir(fname):
dos2unix(fname)
def dos2unix_tree():
os.path.walk('.', dos2unix_tree_core, '*')
dos2unix_tree()