- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我读了一篇关于 makefile 的很好的教程,但是当事情变得更复杂时我有点困惑。
我重组了我的工作区文件夹并添加了子文件夹:这是我的工作区文件夹的图像:
我尝试编辑 makefile,但仍然无法成功编译我的文件。
我只需要在 make 文件中声明头文件,还是同时需要头文件和 cxx 文件?
在 makefile 中,我声明了如何构建发布版和调试版。我试着说:在调试文件夹中创建调试 .o 文件,并在调试中将它们链接到一个名为 exefile 的可执行文件中。由于我添加了子文件夹 include 和 src,这变得一团糟,我现在不知道如何正确编辑 makefile。
这是生成文件的代码:
#Compiler Flags#
CC = g++
CFLAGS = -Wall -Werror -Wextra
HDIR = include
#Project Files#
SRCS = src/main.cxx src/ex05_01.cxx src/ex05_02.cxx
OBJS = $(SRCS:.cxx=.o)
EXE = exefile
#Debug Build Settings#
DBGDIR = debug
DBGEXE = $(DBGDIR)/$(EXE)
DBGOBJS = $(addprefix $(DBGDIR)/, $(OBJS))
DBGCFLAGS = -g -O0 -DDEBUG
#Release Build Settings#
RELDIR = Release
RELEXE = $(RELDIR)/$(EXE)
RELOBJS = $(addprefix $(RELDIR)/, $(OBJS))
RELFLAGS = -g -O0 -DNDEBUG
.PHONY: all clean debug prep release remake
#default build
debug: $(DBGEXE)
$(DBGEXE): $(DBGOBJS)
$(CC) $(CFLAGS) $(DBGCFLAGS) -o $(DBGEXE) $^
$(DBGDIR)/%.o: %.cxx
$(CC) -c $(CFLAGS) $(DBGCFLAGS) -o $@ $<
# Release rules
release: $(RELEXE)
$(RELEXE): $(RELOBJS)
$(CC) $(CFLAGS) $(RELCFLAGS) -o $(RELEXE) $^
$(RELDIR)/%.o: %.cxx
$(CC) -c $(CFLAGS) $(RELCFLAGS) -o $@ $<
# Other rules
prep: mkdir -p $(DBGDIR) $(RELDIR)
remake:
clean all
clean:
rm -f $(RELEXE) $(RELOBJS) $(DBGEXE) $(DBGOBJS)
感谢您的帮助!
编辑:我忘记发布 make 的错误消息:
*** No rule to make target
debug/main.o', needed by
debug/exefile'. Stop.
最佳答案
您还应该包括头文件依赖项的规则。假设 main.cxx 依赖于 ex05_01.h,当 ex05_01.h 改变时,您会希望重新编译 main.cxx。像这样的东西可以完成这项工作:
main.o: ex05_01.h ... (add more headers if you have)
(对所有 .o 文件重复)
您的调试版和发布版只有几处不同:输出文件夹 DIR 和 FLAGS 中的 DEBUG/NDEBUG 定义标志。为避免重复所有设置,您可以重构并制定共同目标,然后使用变量条件在设置之间切换,例如,如果您像这样运行 make:
make BUILD=REL <target>
您将获得一个用“REL”值定义的变量 BUILD,然后您可以使用 ifeq
(参见 https://www.gnu.org/software/make/manual/html_node/Conditional-Example.html#Conditional-Example)相应地设置您的 DIR 和 FLAGS。
关于c++ - 我是否需要在 make 文件中声明头文件或 cxx 文件或两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54850401/
我想知道是否有办法只在编译时而不是在链接时将一些标志传递给编译器 (g++)。让我用一个例子来解释:我想这样构建我的程序: g++ -c source1.cpp -o source1.o g++ -c
我们在使用 Visual Studio 2012 在 Windows 7 64Bit 下使用 CMake (v2.8.12) 编译项目时遇到问题。CMake 给我们以下错误。我们已经尝试使用管理员权限
我是 Linux 的新用户,正在尝试下载 Avogadro 1.2.0。 我在使用命令 cmake ../ 时遇到问题,当我这样做时 -- The C compiler identification
我使用的是 Julia 1.1.1 和 Cxx 的 0.3.2 版。我发现当我从我定义的模块中调用 icxx""时出现错误,但在 REPL 中调用它时却没有。在我的 REPL 中: using Cxx
./cmake-3.4.1/bin/cmake .. -- The CXX compiler identification is unknown CMake Error at CMakeLists.t
我的代码库中有大量文件。我正在尝试使用具有一个文件 a.h. 的其他库来编译我的代码库。如果我在我的代码库中包含 say a.h 文件,我会遇到编译问题,该文件已经定义了一些具有与 a.h 中定义的枚
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Where does the value of CXX in a makefile come from? 我
我正在尝试使用 Cmake 将外部库安装到我的 C++ 项目中。我希望使用该库生成 Xcode 项目。在我的终端中,我从构建目录运行以下命令: cmake -G Xcode .. 这给了我以下错误:
我正在尝试在ubuntu 16.10上交叉编译ndn-cxx以在arduino yun上使用它。我正在关注steps。 当我尝试执行./waf命令时,出现以下错误: [ 30/141] Com
来自CXX Driver Quickstart guide我完全无法在 Ubuntu 或 CentOS VM 上完成新驱动程序的编译。 我已经按照这封信中的步骤执行了好几次,但我不确定哪里出了问题。
我有一个类,它有一个 bsoncxx::document::view view 作为 private 属性,还有一个从 Mongo 数据库获取文档并保存的方法结果在本地 bsoncxx::docume
这个问题在这里已经有了答案: gitignore does not ignore folder (7 个答案) 关闭 10 个月前。 我的 android 项目中有这个 .gitignore 文件,
我正在尝试在 Ubuntu14.4 上编译 mongo-cxx-driver-r3.1.1 。我已经按照说明从源代码安装了 mongo-c-driver-1.6.3。 pkg-config --cfl
我尝试让我的库目标依赖于 c++14。我怎样才能实现链接到我的库目标的目标也依赖于 c++14? 我尝试使用: add_library(lib SHARED ${FILES}) target_comp
帮助!我在提交我的项目使用 dbus-cxx 时可能犯了一个巨大的错误。该库似乎已被其作者遗弃,并且邮件列表对新成员不开放。这是我的问题: 没有关于使用 dbux-cxx 发送或接收包含非 POD 数
我使用 dbus-cxx通过 dbus 进行方法调用。现在有返回多个参数的方法,我不知道如何接收第一个参数以外的任何参数。 我初始化代理方法: DBus::MethodProxy& info_prox
CXX 测试框架的有效性如何,假设您正在围绕您编写的代码编写单元测试用例。代码中的任何错误也可能会转化为单元测试代码中的错误吗?这不是两个负数组成一个正数吗? 此外,花在 CXX 上的时间和精力至少等
在 cmake 已经预编译失败后,在 99% 编译时链接 CXX 可执行世界服务器。 [ 99%] Linking CXX executable worldserver /usr/bin/ld: ..
代码片段: target_test : test.cc $(CXX) $(CPPFLAGS) $(CFLAGS) test.cc 我知道 CXX 是一个变量(包含要调用的编译器命令),但我想知
我正在使用以下代码查询一个集合: bsoncxx::stdx::optional query_result = collection.find_one(bsoncxx::builder::stream
我是一名优秀的程序员,十分优秀!