c++ - 生成文件/nmake : strip out folder bits from the file list

标签 c++ makefile nmake

我有一个 makefile(使用 nmake 和 VC++ 2005):

CPP_OBJS = $(CPP_SOURCE:.cpp=.obj)


$(TARGET) : $(CPP_OBJS)
    $(link) $(ldebug) $(lflags) /DLL \
    $(LIBPATHS) \
    $out:$@ $(CPP_OBJS) $(conlibs)  

问题是链接步骤失败,因为 $(CPP_OBJS) 被扩展到文件列表中,其中每个文件名都以文件夹名称作为前缀(这样它是从 CPP_SOURCE 生成的)。由于所有 .obj 文件都在当前文件夹中(编译结果)- link.exe 无法找到 .objs。

我需要这样的东西:(我在这里找到它:http://uw714doc.sco.com/cgi-bin/info2html?%28make.info%29File%2520Name%2520Functions&lang=en)

`$(notdir 名称...)' 提取 NAMES 中每个文件名的目录部分以外的所有内容。 如果文件名不包含斜线,则保持不变。 否则,从最后一个斜线开始的所有内容都会从中删除。

但是对于 VC++ 2005 附带的 NMAKE 似乎不起作用。

非常感谢任何解决此问题的想法。谢谢。

最佳答案

$(notdir) 不适合您,因为这是 GNU make 功能,而您正在使用 NMAKE。

我不完全清楚你想做什么,但对你的问题的简短回答是使用带有文件修饰符的 NMAKE 自动变量。在这种情况下,$(**) 是目标的所有先决条件的列表,添加 F 修饰符将删除目录名称。例如:

CPP_SOURCE=subdir/foo.cpp subdir/bar.cpp
CPP_OBJS=$(CPP_SOURCE:.cpp=.obj)
all: $(CPP_OBJS)
        @echo Unmodified: $(**)
        @echo Filenames only: $(**F)

假设您有一个包含文件 foo.objbar.obj 的目录 subdir,这会打印:

Unmodified: subdir/foo.obj subdir/bar.obj
Filenames only: foo.obj bar.obj

希望对您有所帮助。

关于c++ - 生成文件/nmake : strip out folder bits from the file list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1871179/

相关文章:

c++ - NetBeans C++ 8.0.2 输出中这些消息的含义是什么?

c++ - 我可以使用类型列表构建抽象访问者吗?

C: LINK.EXE 从 Makefile 而不是从命令行失败

linux - 为疯狂的大软件制作 .spec 文件的理智方法

android - 如何在 android 的交叉编译期间修复部分不匹配错误

escaping - NMake CLI 上的宏定义包含空格

c - 来自 nmake : "no rule to make target ` *. rc'"

c++ - 我的 ListView 没有在 Qt 中获得键盘焦点

c++ - 什么 VS2010 C 项目设置导致 exes 需要兼容模式

c - 指定 C 程序在同一库中弹出 Python 程序的路径的好方法是什么?