代码之家  ›  专栏  ›  技术社区  ›  0xDEADBEEF

Cygwin make找不到Cygwin命令

  •  1
  • 0xDEADBEEF  · 技术社区  · 14 年前

    在尝试安装构建服务器时,我遇到了一个有趣的问题,即所有cygwin命令都可以从DOS框中运行,但有时从make调用时不起作用。更奇怪的是,有些人制定目标,比如“干净”,工作,而有些人,比如“所有人”,却没有。

     .PHONY: all 
     all: update_autoconstants
        /usr/bin/rm -f $(OBJ_DIR)/myfile1.txt   
        rm -f  $(OBJ_DIR)/myfile2.txt   
    
     .PHONY: clean 
     clean:     
        rm -f $(OBJ_DIR)/*.*
    

    请注意,在“all”中,一个rm调用有一个完整路径,另一个没有路径。还要注意clean的rm调用没有路径。

    对此,“make-C makefile all”的响应是:

    /usr/bin/rm -f ../../obj/myfile1.txt 
    rm -f ../../obj/myfile2.txt 
    make: rm: Command not found 
    make: *** [all] Error 127
    

    全路径有效,无路径无效。然后什么开始我的头纺纱是'干净'的目标,使没有路径工程罚款。不仅仅是cygwin命令,make也找不到编译器。很明显,在某个地方路径已经被套住了,虽然设置了环境变量path,但只有在make中,这在DOS提示符下才能正常工作。

    C:\>cygpath --unix c:\programme\cygwin\bin\rm  
    /usr/bin/rm
    

    这台机器在VMWare ESX上的虚拟机上运行Windows Server 2003德语,cygwin安装是昨天完成的,安装在c:\Program\cygwin\中,其他一切都是干净的香草Windows安装。

    有什么想法吗?提前谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   0xDEADBEEF    14 年前

    与其说是一种解决方案,不如说是一种变通方法——我们让所有的makefile都使用指向它们所需的exe文件的绝对路径,这在任何情况下都比搜索路径并获取所找到的要好一些。

    为了保存用户,最好调用cygwin的bin目录中的一些google命令:

    CYGWIN_EXE_PATH = /usr/bin
    RM        = $(CYGWIN_EXE_PATH)/rm.exe
    .PHONY: clean
    clean:
        $(RM) -f $(OBJ_DIR)/*.*
    

    COMPILER_DIR = "$(PROGRAMFILES)/TASKING/c563 v3.6r1"
    

    希望有帮助。

        2
  •  0
  •   RichColours    11 年前

    我也经历过同样的事情。

    我的解决方法是从bash内部运行makefile。以前我只是在windows命令框中运行make。这为我解决了问题,但也产生了新的问题。在make期间创建的一些文件的权限设置非常奇怪。