【问题标题】:How do I configure a permanent shell in GNU Make running on Windows?如何在 Windows 上运行的 GNU Make 中配置永久 shell?
【发布时间】:2021-10-22 12:00:04
【问题描述】:

我正在维护一个包含数百个 C 和 C++ 文件的跨平台项目 (Linux/Windows/32/64)。为此,我使用了一个使用 GNU Make 的 makefile。 当我在 Windows 中编译时会出现我的问题,因为 Visual Studio (cl) 编译器强制我通过调用 vcvarsall.bat [platform_type] 来设置环境,并且每次编译一个文件时都会执行这个过程,而整个过程在时间。

部分生成文件

# C object file generation rule
../int/$(PROJECT)/%.o: ../%.c 
ifeq ($(OS),Windows_NT)
    @vcvarsall.bat x86 & cl $(CFLAGS) -c $(subst /,\,$<)
else
    @gcc $(CFLAGS) -c $<
endif
    

每当编译每个文件时都会执行语句@vcvarsall.bat x86。有没有办法让这条语句只执行一次,并且所有后续的 shell 都继承这个?

谢谢!

【问题讨论】:

    标签: windows makefile gnu


    【解决方案1】:

    这确实是在 Windows 上进行开发的真正令人讨厌的事情之一。

    shell 退出后无法将其值“传递”到下一个 shell。 make 也无法启动单个 shell,然后在该 shell 中运行所有规则的配方。

    您所能做的就是在父 shell 中设置一次值,然后从那里调用 make。最简单的方法是创建一个.bat 文件来执行正确的操作,然后调用make。您可以在 POSIX 系统上拥有一个名称相似的 shell 脚本,它除了调用 make 之外什么都不做。

    如果您真的不想这样做,那么唯一的选择是使用递归 make 调用,其中顶级 make 将运行 vcvarsall 脚本,然后调用将编译所有内容的子 make。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多