将一个目录中的cpp文件编译到另一个目录中

时间:2013-02-19 12:03:17

标签: linux compilation makefile gnu-make

尝试将名为P18298_ca.sub的文件夹中的所有.cc文件编译为P18298_ca.cmp中的.exe文件。我使用包含源目录和目标目录的目录中的make命令进行编译。错误读取:

make: * 没有规则来制作目标P18298_ca.cmp/00a5bffb6a4792d7bcaed90ff6d3ca88-WA.exe', needed by main.exe'。停止。

这是我使用的makefile代码

    CPP_FILES := $(wildcard P18298_ca.sub/*.cc)
    OBJ_FILES := $(patsubst P18298_ca.sub/%.cc,P18298_ca.cmp/%.exe,$(CPP_FILES))
    LD_FLAGS := ...
    CC_FLAGS := ...

    main.exe: $(OBJ_FILES)
        g++ $(LD_FLAGS) -o $@ $^

    obj/%.exe: src/%.cc
        g++ $(CC_FLAGS) -c -o $@ $<

1 个答案:

答案 0 :(得分:0)

二进制文件是从*.obj文件构建的,而不是从*.exe文件构建的。此外,宏中的目录和默认规则必须相同。将Makefile中的这些行更改为

OBJ_FILES := $(patsubst P18298_ca.sub/%.cc,P18298_ca.cmp/%.obj,$(CPP_FILES))

P18298_ca.cmp/%.obj: P18298_ca.sub/%.cc
    g++ $(CC_FLAGS) -c -o $@ $<