Original From:http://www.redantigua.com/msys-win.html
| MSYS - make-in-a-shell on Windows |
MSYS (Minimal SYStem) is an shell environment where you can run configure scripts and use the make tool.A make tool is included in both MinGW (mingw32-make) and UnxUtils (make), but they cannot be executed correctly within a DOS prompt, but needs a proper environment.This is where MSYS comes to help. Running MSYS is similar to open a UNIX xterm window.MSYS also includes its own make tool.Homepage: http://www.mingw.org/msys.shtml Download: http://www.mingw.org/download.shtml Install First, install MinGW. Then, start the MSYS Installer as for any other Windows program. Choose the default option whenever you asked to. In the post-install session (a DOS prompt), you will be asked if MinGW is installed. Type 'y' on all questions. To run a MSYS shell, just click the MSYS desktop icon (created by default). Configure (optional) To run MSYS there is really no configuration needed. MSYS is installed by default in the folder C:/MSYS/1.0, and binaries will be found in C:/MSYS/1.0/bin.There is no need to add this path to the PATH Environment variable. Let's assume you are logged in on Windows as user me: $ pwd /home/meJust like in a UNIX shell session, the default directory is your home directory. Using make and gcc Check out the paths to the tools: $ which gcc /mingw/bin/gccMSYS uses its own make by default: $ which make /bin/makeIf you want to use MinGW's make instead, you have to use its special name: $ which mingw32-make /mingw/bin/mingw32-makeAnd if you want want to use UnxUtils's make, you have to use its full path: $ /c/unxutils/usr/local/wbin/makeComparing make versions (additional info omitted): $ /bin/make --version GNU Make version 3.79.1 $ /mingw/bin/mingw32-make --version GNU Make 3.81 $ /c/unxutils/usr/local/wbin/make --version GNU Make version 3.78.1 We see that MinWG's (这一小点说得很在理,我就曾经遇到过这样的问题,MSYS的make确实表现比MinGW的好) # Very simple Makefile list: /c/unxutils/usr/local/wbin/ls MakefileWorks: $ /bin/make list MakefileFails: $ /mingw/bin/mingw32-make list # process_begin: CreateProcess(NULL, /c/unxutils/usr/local/wbin/ls Makefile, ...) failed. # make (e=3): The system cannot find the path specified. # mingw32-make: *** [list] Error 3Fails: $ /c/unxutils/usr/local/wbin/make list # process_begin: CreateProcess((null), /c/unxutils/usr/local/wbin/ls Makefile, ...) failed. # make (e=3): The system cannot find the path specified. # c:/unxutils/usr/local/wbin/make.exe: *** [list] Error 3So if you get an error similar to the one above, be sure that you use MSYS make: $ which make /bin/make Directory mapping and mount points MSYS uses the following automatic mounts (that is, not configurable) in its directory layout: /doc/msys/README.rtf (that is, C:/msys/1.0/doc/msys/README.rtf outside MSYS), included in the MSYS distribution.How to configure mount points manually If we access C:/MSYS/1.0/mingw outside MSYS, we that this directory is (and should be) empty.But when accessing /mingw in a MSYS shell, we see the following (assuming MinGW was installed before MSYS): $ ls /mingw COPYING MinGW-5.1.3.exe bin include installed.ini libexec mingw32 COPYING.LIB MinGW.url doc info lib man uninst.exeThis is because it is configured (automatically, during the MSYS installation) in /etc/fstab (that is, C:/msys/1.0/etc/fstab outside MSYS) as a user defined file system binding.As the file name /etc/fstab indicates, this can be seen as a mount point.(Or, if you prefer, as creating a "directory symlink".) If you want to access other directories without using the full path, you can configure your own mount points. Assume we have some source code in c:/Documents and Settings/Administrator/src that we want to access easily from within MSYS, without using the full path every time.Create an empty directory C:/msys/1.0/home/me/src outside MSYS, or /home/me/src inside MSYS: $ mkdir /home/me/srcEdit C:/msys/1.0/etc/fstab (use for example WordPad outside MSYS, or vi inside MSYS): # Mount point created automatically during install c:/MinGW /mingw # Create a mount point for c:/Documents and Settings/Administrator/src on /home/me/src c:/DOCUME~1/ADMINI~1/src /home/me/srcIf you have any problems with configuring similar to the ones I experienced, read these notes: # NOTE: # Different from UNIX, in MS Windows both source and destination directories have to exist. # Source directory (c:/Documents and Settings/Administrator/src) will contain the files, # destination directory (/home/me/src) must exist and be empty. # /home/me/ is already mapped to c:/msys/1.0/home/me # That means that C:/msys/1.0/home/me/src has to be created manually. # This can be done either with Windows Explorer, or with the "mkdir src" command # in a MSYS shell (in the /home/me directory). # NOTE 2: # When I just finished installing MSYS, I had problems to reflect changes in this file, # even when closing a MSYS session and opening a new one. # The solution was to restart Windows. # Anyhow, this seems to be a one-time problem. # From there and on, restart Windows is no longer needed, just close the MSYS session and open a new one. # NOTE 3: # I had problems using long names (with spaces) in path names. # c:/Documents and Settings/Administrator/src /home/me/src #DOES NOT WORK! # c:/Documents/ and/ Settings/Administrator/src /home/me/src #DOES NOT WORK! # c:/DOCUME~1/ADMINI~1/src /home/me/src #WORKS! # The solution was to find out the short name for the path. # To do this, open a DOS prompt and type "dir /-N". Using third-party programs through wrapper scripts There is no way to create a "file symlink" in MSYS in a way similar to a "directory symlink" (that is, a mount point). The command ln for creating links works, but it actually makes a copy of the original file, not a symlink to it.This is not what we want. The solution is to create a wrapper script in /usr/local/bin.The PATH environment variable in MSYS reflects the one configured in Window's Control Panel, with the MSYS and MinGW paths prepended: $ echo $PATH
.:/usr/local/bin:/mingw/bin:/bin:/windows/configured/paths/go/here As we see, first the current directory is searched, then /usr/local/bin/, then the MinGW path (/mingw/bin), then the MSYS path (/bin).You can take advantage of the path /usr/local/bin being prepended to $PATH, to create your own shell script wrappers.This way, you can call any Windows program without using the full path. Create the /usr/local/bin directory if it doesn't exist: mkdir -p /usr/local/binExample 1: Create /usr/local/bin/wp, a wrapper for WordPad.exe: #!/bin/sh /c/Program/ Files/Windows/ NT/Accessories/wordpad.exe "$@"Example 2: Create /usr/local/bin/emacs, a wrapper for EmacsW32.exe (obviusly requires EmacsW32, how to install EmacsW32): #!/bin/sh /c/Program/ Files/Emacs/emacs/bin/emacsclientw.exe -n "$@"Example 3: Create /usr/local/bin/emacs-redantigua, a wrapper for EmacsW32.exe accessing a remote file/directory through plink (requires PuTTY, here is how to install PuTTY): #!/bin/sh /c/Program/ Files/Emacs/emacs/bin/emacsclientw.exe -n /plink:redantig@redantigua.com:/home/redantig/www/Now you can edit any file from inside MSYS either with the command wp <filename>or emacs <filename>depending on your preferencies. More info about mount points and scripts can be found in C:/msys/1.0/doc/msys/README.rtf, included in the MSYS distribution.Note: From C:/msys/1.0/doc/msys/README.rtf:"If you wish to map a path with spaces you must use the DOS style name." This also holds true for paths with spaces (a.k.a. 8dot3 file names) in script variables. While the script /usr/local/bin/wp in Example 1 above works, the following script /usr/local/bin/wp_8dot3 will NOT work: #!/bin/sh # NON-WORKING SCRIPT! # Running this script will fail with the following error: # /usr/local/bin/wp_8dot3: /c/Program/: No such file or directory WP_EXE="/c/Program/ Files/Windows/ NT/Accessories/wordpad.exe" $WP_EXE $@ Here is how to find the path manually: #!/bin/sh # CD C:/ # DIR /X|FINDSTR PROG # Displays: # 19/11/2007 10:16 <DIR> PROGRA~1 Program Files # CD "Program Files" # DIR /X|FINDSTR WIN # Displays: # 04/04/2005 19:06 <DIR> WINDOW~4 Windows Journal Viewer # 22/02/2006 21:45 <DIR> WINDOW~2 Windows Media Player # 04/04/2005 18:40 <DIR> WINDOW~1 Windows NT # CD "Windows NT" # DIR /X|FINDSTR ACC # Displays: # 04/04/2005 19:08 <DIR> ACCESS~1 Accessories # CD Accessories # DIR /X|FINDSTR wordpad # Displays: # 04/08/2004 06:00 214.528 wordpad.exe WP_EXE="/c/PROGRA~1/WINDOW~1/ACCESS~1/wordpad.exe" $WP_EXE $@ Finding the path manually may be a bit tedious. You can download the script non8dot3, which converts 8dot3 paths to non-8dot3 ones. Additional tools As mentioned before, MSYS requires MinGW to be installed. You may also install Emacs and/or UnxUtils to get a more UNIX-like environment on your Windows box. If you want other development tools than make, you should consider installing msysDTK, which basically includes autoconf, automake, libtool, autogen, openssl, openssh, cvs, guile, and inetutils.You may also install GDB for MinGW. Read more http://www.mingw.org/msys.shtml - Home Page http://www.mingw.org/docs.shtml - Documentation http://www.mingw.org/MinGWiki/index.php/GettingStarted - Getting Started http://allies.freezope.org/MsysMingw - Msys Mingw tutorial |
MSYS与Make工具使用指南
本文介绍MSYS环境下的Make工具使用方法,包括配置、目录映射及第三方程序的集成。通过MSYS可以在Windows中运行类似Unix的Shell环境。
5661

被折叠的 条评论
为什么被折叠?



