C++ & Gtkmm 的 Makefile 问题
Makefile Issues with C++ & Gtkmm
我熟悉 Gtkmm 和 C++,但对 Makefiles 很陌生,并且在让我实际生成可执行文件时遇到问题。我知道一个完整的 Makefile 对于我项目的当前简单性来说是矫枉过正的,但我正在尝试将一个基本模板放在一起以用于大型项目。我在 Ubuntu 17.10 上并从我的"build"文件夹运行make
命令。任何帮助将不胜感激!
终端输出
pearscol@UBUNTU-1710:~/projects/testprogram/build$ make
g++ -o testprogram `pkg-config --libs gtkmm-3.0`
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In
function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:19: recipe for target 'testprogram' failed
make: *** [testprogram] Error 1
源文件结构
- /build
- /build/Makefile
- /src
- /src/main.cpp
/build/Makefile
CXX = g++
CXXFLAGS = `pkg-config gtkmm-3.0 --cflags` -std=c++14 -g -Wall
INCLUDES = -I../include
SRCS = $(wildcard *.cpp)
OBJS = $(SRCS:.cpp=.o)
PROGRAM = testprogram
DEPDIR = ../src/
LIBS = `pkg-config --libs gtkmm-3.0`
all: $(PROGRAM)
-include $(OBJS:%.o=$(DEPDIR)/%.Po)
%.o: %.cpp
$(CXX) -MT $@ -MD -MP -MF $*.Tpo -c -o $@ $(CXXFLAGS) $<
$(PROGRAM): $(OBJS)
$(CXX) -o $(PROGRAM) $(OBJS) $(LIBS)
# DO NOT DELETE THIS LINE -- make depend needs it
/src/main.cpp
#include <gtkmm.h>
int main(int argc, char *argv[]) {
Glib::RefPtr<Gtk::Application> app =
Gtk::Application::create(argc, argv, "testprogram");
Gtk::Window window;
window.set_default_size(400, 200);
window.set_title("Tutorial");
return app->run(window);
}
如果要使用$(wildcard ...)
函数指定源文件, 然后替换:
SRCS = $(wildcard *.cpp)
跟:
SRCS = $(wildcard src/*.cpp)
因为src
是*.cpp
文件相对于构建目录的位置。
要将目标文件放在构建目录中,请替换:
OBJS = $(SRCS:.cpp=.o)
跟:
$(notdir $(SRCS:.cpp=.o))
最后执行以下操作之一:
替换模式规则:
%.o: %.cpp
跟:
%.o: src/%.cpp
或者,将模式规则保留原样并添加:
VPATH := src
到生成文件顶部的变量设置。看 VPATH。
旁白
您的默认目标all
是一个虚假目标:您永远不会 一个名为all
的文件,并且您假设不会存在这样的文件。最好将其指定为.PHONY
目标。
要定义变量,请使用简单扩展 -VAR := val
- 而不是 递归扩展 -VAR = val
- 除非需要递归扩展,而它不在您的 makefile 中。
您的生成文件缺少 的clean
目标 删除所有生成建议并将构建目录恢复到其原始状态 州。提供这种虚假目标是标准的。
据我所知,
$(CXX) -o $(PROGRAM) $(OBJS) $(LIBS)
结果在
g++ -o testprogram `pkg-config --libs gtkmm-3.0`
因为$(OBJS)
为空,因为$(SRCS)
为空,因为*.cpp
不匹配任何文件,因为您的build
目录不包含.cpp
文件。
相关文章:
- 在 Makefile 中的链接过程中添加库时出现问题
- 构建Makefile的问题
- C++ & Gtkmm 的 Makefile 问题
- "Recursive Makefile Considered Harmful"样式生成文件问题
- 使用makefile编译C++项目时出现问题
- Makefile问题将Zeromq Libs链接在Linux上
- 对的未定义引用带有继承,makefile问题
- 关于Makefile的一些问题
- 类模板的Makefile问题:clang警告链接器输入未使用
- 一个文件Makefile问题:C++
- 关于我的简单Makefile的问题
- 在Linux中执行C++makefile时出现问题(在mac上运行良好)
- C++与Fortran混合程序的Makefile编译问题
- 需要解决在Storm数据程序中读取Makefile的问题
- 我的简单g++ Makefile有什么问题?
- Ardrone SDK中的外部Makefile问题
- makefile编译问题
- 我的makefile有什么问题?无法实现
- Makefile问题:错误127,255,在Makefile中运行程序
- Makefile:问题得到ifstatement工作=(