【问题标题】:Linux find command equivalent for makefile on windowsLinux find命令等效于Windows上的makefile
【发布时间】:2020-08-18 03:37:01
【问题描述】:

我刚刚安装了 MinGW,我打算退出 make 来编译一个项目,我意识到我得到的 makefile 在 Ubuntu 上运行良好,但显然不能在 Windows 上运行。这就是我得到的

G++ ?= g++
C_FLAGS = 0

BIN ?= program.exe

HDR_DIR ?= ./headers
OBJ_DIR ?= OBJ
SRC_DIR ?= SRC

FILES ?= $(basename $(notdir $(shell find $(SRC_DIR) -name "*.cc")))

SRC ?= $(addsuffix .cc, $(FILES))
OBJ ?= $(addsuffix .o, $(FILES))


$(BIN): $(addprefix ./OBJ/, $(OBJ))
    $(G++) -g $^ -o $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cc
    $(G++) -I$(HDR_DIR) -g -c -o $@ $<

所以我搜索了一下,我认为唯一需要更改的行是我定义 FILES 变量的位置。我试过了:

FILES ?= $(basename $(notdir $(shell $(SRC_DIR) /s "*.cc")))

但我想我不明白 dir 的工作原理......

【问题讨论】:

    标签: windows makefile gnu-make


    【解决方案1】:

    你最好使用 gnu make file wildcard - 这样它就可以移植了:

    像这样工作:

    FILES=$(wildcard subdir/*.c)
    

    对于您的 makefile 示例:

    FILES ?= $(basename $(notdir $(wildcard $(SRC_DIR)/*.cc)))
    

    【讨论】:

    • 嗯.. 它就像一个魅力!我会调查那个通配符的事情,非常感谢!
    • 它是一个多功能的功能 - 你也可以使用它来检查文件是否存在:ifneq (,$(wildcard somefolder/somefile.c))。如果可能的话,最好不要使用特定于操作系统的函数(你不能总是这样做),但如果你必须将它们包装在你自己的 makefile 函数中 coderwall.com/p/cezf6g/define-your-own-function-in-a-makefile 然后你可以创建一个集合linux的功能和windows(或其他操作系统)相同的功能,并将它们放入不同的makefile(例如win_make.mk,lin_make.mk),然后根据您的操作系统包含您想要的一个:)
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多