- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经浏览了大约 20 个关于 makefile 的不同网页,但我似乎仍然无法让它为我的项目工作。一个文件夹中包含所有文件的项目可以工作,但我无法让它与我的特定项目一起工作,因为我的所有文件都在不同的文件夹中。
这是一个示例项目,它具有所有必要的特性和区别,在结构上与我的项目相同,但明显更小:
.
|-- bin
| |-- apple (executable 1) // needs apple's .o files (C++)
| |-- banana (executable 2) // needs banana's .o files + .so file (C/C++)
|-- include
| |-- format
| | |-- format.h
| |-- apple
| | |-- foo.h
| |-- banana
| |-- bar.h
|-- lib
| |-- apple
| | |-- apple_main.o
| | |-- apple_one.o
| |-- banana
| | |-- banana_main.o
| | |-- banana_one.o
| | |-- banana_two.o
| |-- archive_apple
| | |-- libapple_one.a
| |-- archive_banana
| | |-- libbanana_one.a
| | |-- libbanana_two.a
| |-- external
| | |-- foo.so
|-- makefile
|-- src
|-- drivers
| |-- apple_main.cpp // needs format.h
| |-- banana_main.cpp // needs format.h,
|-- apple
| |-- apple_one.cpp // needs format.h, foo.h
|-- banana
|-- banana_one.c // needs format.h, bar.h
|-- banana_two.cpp // needs format.h, bar.h
我一直在网上阅读有关自动生成 makefile 的内容,您可以在其中将某些内容输入到遍历文件夹的 makefile 中,并使用替换和其他内容来消除明确列出每条规则的需要,但没有一个他们工作了。我一定是做错了什么,但我不知道是什么。
我想将正确的内容放入我的 makefile 中,以创建您在上面看到的内容。
如您所见,项目的某些部分必须用 C 编写。(我想我可以将所有内容更改为 C++,但如果不需要,我不想这样做)。
我的编译器和标志将是:
CC := gcc
CXX := g++
C_FLAGS := -Wall -std=c17
CXX_FLAGS := -Wall -std=c++17
我的目录将使用 -I
来避免类似的事情
// #include "../../include/format/format.h"
// instead:
#include <format/format.h>
如果有帮助的话,我还将使用 -L
,因为我想创建那些 .a
文件。据我所知,它是这样的:
libsomething.a: something.o
ar rvs ./lib/archive/libsomething.a ./lib/foo/something.o
为了将这个项目放在一起并生成我的可执行文件、目标文件和库,我的 makefile 中需要什么?
注意:我了解 makefile 的基础知识,例如规则的工作原理以及如何为小型简单项目手动组合 makefile,但我才刚刚开始了解内置函数和通配符以及其他复杂的东西。
当然,由于我的项目比这大得多,尽管结构相同,我需要的答案是通用的或易于修改的,就像我在网上看到的那些由于某种原因不起作用的 makefile 示例在我的项目上。这样,我就可以将其适应 future 的项目,而无需进行不必要的手动工作。
最好(除非这样做是不好的做法),我希望从库中构建可执行文件,类似于:
executable: something_main.o libfoo.a libbar.a
$(CXX_BUILD) -o ./bin/executable \
./lib/something_main.o \
-L./lib/something \
-lfoo -lbar
最佳答案
可能会有所帮助。
项目结构:
xc
inc
src
test
inc
src
obj
xc
test
bin
生成文件
PNAME = xc
OBJS_DIR=obj
BIN_DIR=bin
INC_SUB_DIR=inc
SRC_SUB_DIR=src
CPP = gcc
#CPP += -m32
#LIBPATH = -Llib
LIBLIST += -lz
LDFLAGS += $(LIBPATH) $(LIBLIST)
UTILS_DIR = xc
UTILS_SRCS = $(wildcard $(UTILS_DIR)/$(SRC_SUB_DIR)/*.c)
UTILS_INCS = $(wildcard $(UTILS_DIR)/$(INC_SUB_DIR)/*.h)
UTILS_SLIST = $(UTILS_SRCS) $(UTILS_INCS)
UTILS_OLIST = $(wildcard $(OBJS_DIR)/$(UTILS_DIR)/*.o)
UTILS_OBJS = $(patsubst $(UTILS_DIR)/$(SRC_SUB_DIR)/%.c,$(OBJS_DIR)/$(UTILS_DIR)/%.o,$(UTILS_SRCS))
BASE_DIR = test
BASE_SRCS = $(wildcard $(BASE_DIR)/$(SRC_SUB_DIR)/*.c)
BASE_INCS = $(wildcard $(BASE_DIR)/$(INC_SUB_DIR)/*.h)
BASE_SLIST = $(BASE_SRCS) $(BASE_INCS)
BASE_OLIST = $(wildcard $(OBJS_DIR)/$(BASE_DIR)/*.o)
BASE_OBJS = $(patsubst $(BASE_DIR)/$(SRC_SUB_DIR)/%.c,$(OBJS_DIR)/$(BASE_DIR)/%.o,$(BASE_SRCS))
SLIST += $(UTILS_SLIST) $(BASE_SLIST)
OLIST += $(UTILS_OLIST) $(BASE_OLIST)
OBJS += $(UTILS_OBJS) $(BASE_OBJS)
INCPATH = -I$(UTILS_DIR)/$(INC_SUB_DIR) -I$(BASE_DIR)/$(INC_SUB_DIR)
CPPFLAGS += -c -Wall -Wextra
#CPPFLAGS += -O2
CPPFLAGS += $(INCPATH)
#CPPFLAGS += -g
# target
.PHONY = all
all: $(PNAME)
packsrc:
tar zcvf $(PNAME)-src-`date +%Y%m%d%H%M%S`.tgz $(SLIST) doc Makefile
slib:
$(AR) rcs $(PNAME)-`date +%Y%m%d%H%M%S`.a $(OBJS)
clean:
$(RM) $(OLIST) $(BIN_DIR)/$(PNAME)
$(PNAME): $(OBJS)
@ mkdir -p $(BIN_DIR)
@ mkdir -p $(OBJS_DIR)
@ mkdir -p $(OBJS_DIR)/$(UTILS_DIR)
@ mkdir -p $(OBJS_DIR)/$(BASE_DIR)
$(CPP) $^ -o $(BIN_DIR)/$@ $(LDFLAGS)
$(OBJS_DIR)/$(UTILS_DIR)/%.o:$(UTILS_DIR)/$(SRC_SUB_DIR)/%.c
$(CPP) $(CPPFLAGS) $< -o $@
$(OBJS_DIR)/$(BASE_DIR)/%.o:$(BASE_DIR)/$(SRC_SUB_DIR)/%.c
$(CPP) $(CPPFLAGS) $< -o $@
dos2unix:
dos2unix $(SLIST)
关于c++ - 我怎样才能使我的 makefile 以我需要的方式将我的项目放在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71934550/
我当前项目中的许多类都有几个只能从类本身内部调用的属性和方法。此外,根据类(class)的当前状态,它们可能会扰乱类(class)的工作。 目前,所有这些接口(interface)都在 .h 文件的主
我想使用ngbTabSet将nav-pills in card-header 和tab-content in card-body。但我不知道该怎么做。 这是我尝试实现的示例(使用 bootstrap.
我正在浏览文档以查找如何允许放置在停靠栏图标上。据我所知,建议您使用 LSItemContentTypes,因为 CFBundleTypeOSTypes 已弃用。但是,我无法让 LSItemConte
我正在尝试在书签中使用 jquery UI 作为 slider 。并且 jquery ui 要求在普通 jquery 文件之后包含该文件。 所以到目前为止我所尝试的只是将脚本附加到 header ,同
您好,我尝试了广泛的谷歌搜索,但似乎没有任何帮助。 这是我的场景: 公司 Logo 存储在外部域/网址(矩形)中。 带有谷歌地图的 Ionic 应用程序,将这些 Logo 作为标记放置在 map 上。
我今天在阅读我的一些 C# 代码时发现了这一行: if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Pr
我刚遇到this question在 Go FAQ 中,它让我想起了困扰我一段时间的事情。不幸的是,我真的不明白答案是什么。 似乎几乎所有非 C 类语言都将类型放在变量名之后,如下所示: var :
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
这是有效的 HTML 吗? 最佳答案 作为元素可以包含 phrasing content ,以及属于该组,则有效。 从语义上(并且具有一些常识),如果唯一的内容是 , 不;如果它同时包含文本和图像
我有两本 T.Parr 写的关于 ANTLR 的书,我到处都看到美元符号和符号的引用。它也对我有用: term : IDENT -> { new TokenNode($IDENT) }; 或更复杂的东
我在实现段控制时遇到了一些问题。因为我希望它是一个固定的标题,所以当我滚动时我总是可以看到它,我已经在 - (UIView *)tableView:(UITableView *)tableView v
我有一个 20x36px (10x18pt) 的箭头图像,当我选择一个 UIImageView 时,将它拖到我的 View Controller 上然后设置图像,它总是模糊的。我只在我的项目中包含 @
How can I put background image when I hover a link Insert Bg in this a when hov
我需要在我的 .container 中添加(最新的第一个)新分区,但在 .controls (按钮)之后。可能吗? 注意:添加新的分区来保存按钮下方的前置控件对我来说不是一个选择。 HTML 需要保持
我是一名优秀的程序员,十分优秀!