我是一名普通人,所以请提前道歉。
我有一个文件夹结构,其中foo.cpp位于项目的根目录中,所有其他.cpp文件位于另一个文件夹中的一个和所有标题中。每当我改变一些东西时,只要说一切都是最新的。
使用Windows 10。
代码来自
我的makefile:
OBJS = foo.o bar.o
CC = g++
INCLUDE_PATHS = -IC:\Mingw_libs\include\SDL2
LIBRARY_PATHS = -LC:\Mingw_libs\lib -Iheaders
COMPILER_FLAGS = -std=c++11
LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2 -lSDL2_image
OUTPUTFILE = main
all: $(OBJS)
$(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(LINKER_FLAGS) -o $(OUTPUTFILE)
clean:
rm *.o
rm *.exe
foo.o:
$(CC) -c foo.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)
bar.o:
$(CC) -c sources/bar.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)
答案 0 :(得分:0)
你应该像这样声明目标依赖:
server <- function(input, output) {
mydata<-reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
data<-read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)
data
})
output$contents <- renderTable({
mydata()
})
output$summary <- renderTable({
m<-lm(mydata()[,1]~mydata()[,2])
summary(m)$r.squared
})
}
shinyApp(ui, server)
否则make现在不会检查文件是否有变化。
答案 1 :(得分:0)
您的makefile与foo.o
或bar.o
无依赖关系。
此
all: $(OBJS)
$(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(LINKER_FLAGS) -o $(OUTPUTFILE)
说all
取决于$(OBJS)
。因此,当$(OBJS)
中的某个文件发生更改时,将运行该步骤。
这说foo.o
取决于什么:
foo.o:
$(CC) -c foo.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)
您需要添加依赖项:
foo.o: foo.cpp
$(CC) -c foo.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)
请注意,:
之后的空格通常需要是制表符,而不是实际空格。
答案 2 :(得分:0)
您需要向目标添加依赖项。 Make有语法
target : prerequisite
command
所以在你的情况下:
foo.o: foo.cpp
$(CC) -c $< $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)
与bar
$<
是第一个先决条件的占位符。因此,您不必两次输入foo.cpp
。
您可以在此处查看更多自动变量:https://www.gnu.org/software/make/manual/make.html#Automatic-Variables