2012-10-27 57 views
1

我想编译Z3版本4.1.2。后一个成功的配置,当你“做”,我得到以下错误:在OSX上编译Z3

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 

回答

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命令:

混帐克隆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来检索“unstable”分支。然后,执行

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() 
+0

谢谢莱昂纳多。这对我行得通。 – Gheghen