【问题标题】:Makefile with directories带有目录的 Makefile
【发布时间】:2015-07-04 10:37:38
【问题描述】:

我的 Makefile 很好。但是,现在我想要一个名为“Makefile”的文件夹和一个名为“main”的文件夹,其中第一个将包含我的 Makefile,第二个将包含我的项目的 main(),kd GeRaF .

目前,头文件位于同一文件夹中。该文件夹还包含 Makefile 文件夹和主文件夹。

这是我的makefile(尝试了很多组合,这是最后一次尝试):

OBJS    = main_par_auto.o
SOURCE  = ../main/main_par_auto.cpp
HEADER  =   ../Division_Euclidean_space.h   ../Find_diameter.h  ../Find_k_max.h ../Householder.h    ../IO.h ../Mean_variance.h  ../Point.h  ../Random_generator.h   ../Random_kd_forest.h   ../Tree.h   ../Auto_random_kd_forest.h
OUT     =   geraf
CXX = g++
FLAGS   =   -pthread    -std=c++0x  -DRKD_PAR   -O3 -Wall

all: $(OBJS)
    $(CXX)  $(OBJS) -o $(OUT)   $(FLAGS)

# create/compile the individual files >>separately<< 
main_par_auto.o:    main_par_auto.cpp
    $(CXX) -c   ../main/main_par_auto.cpp   $(FLAGS)

.PHONY : all
# clean house
clean:
    rm -f $(OBJS)

我收到此错误:

make: *** No rule to make target `main_par_auto.cpp', needed by `main_par_auto.o'.  Stop.

我正在执行这个命令:make -f Makefile/Makefile_par_auto 以便编译。

请问我错过了什么?

这是大局(字面意思:))

【问题讨论】:

  • 你试过main_par_auto.o: ../main/main_par_auto.cpp吗?
  • 是的@jadhachem。 make: *** No rule to make target `../main/main_par_auto.cpp`, needed by main_par_auto.o'。停止。`
  • 路径是相对于工作目录还是相对于makefile的路径?
  • @Wintermute 我不确定你问了什么。我截图了,有用吗?我认为第一个。我正在从屏幕截图中显示的文件夹运行 make。

标签: c++ makefile directory


【解决方案1】:

Makefile 中的路径必须相对于工作目录(运行 make 的目录),而不是相对于包含 Makefile 的目录。与

main_par_auto.o: main/main_par_auto.cpp
    $(CXX) -c main/main_par_auto.cpp $(FLAGS)

你应该得到预期的结果。

请注意,期望用户以这种方式调用make 是非常不寻常的。通常,您希望在调用 make 的目录中有一个 Makefile(可能会或可能不会继续使用其他目录中的其他 makefile)。

【讨论】:

  • 我打算在调用目录下有一个make,它会从Makefile文件夹中调用对应的Makefile。我现在要测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2019-07-14
  • 2018-11-15
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多