如何将 pkg-config 添加到生成文件
how to add pkg-config to a Makefile?
我的制作文件看起来像这样:
all:main.cpp
g++ -I../../DrAPI/ -Wl,--no-as-needed -ldl -lrt -o SampleApp01 $<
clean:
rm -f SampleApp01
这是我在没有 Makefile 的情况下会做的事情:
gcc main.cpp -o test $(pkg-config --cflags --libs libmongoc-1.0)
现在由于导入 DrAPI,我也必须使用 Makefile 来包含该 API,但是如果没有 pkg-config,我将丢失 libmongoc-1.0。在这种情况下,我应该如何将 $(pkg-config --cflags --libs libmongoc-1.0) 添加到我的 Makefile 中才能正常工作?
我会做一个看起来像这样的Makefile
,所以它使用已经在make(1)
中的规则.尝试make -f /dev/null --print-data-base
查看它们。建议grep
COMPILE.c
和LINK.c
来获取重要的东西。 COMPILE.cpp
,COMPILE.C
和COMPILE.cxx
用于C++,COMPILE.c
用于C。
#!/bin/make
# Makefile
# 2020-02-10 Anders Jackson
# Basic setup
CXX = g++
CXXFLAGS = -c -g -Wall -Wextra
CXXFLAGS += -I../../DrAPI/
LDFLAGS =
LDLIBS = -ldl -lrt
# `pkg-config --list-all | grep -e mongo` will find if installed
# Here is the libmongoc-1.0 setup.
CXXFLAGS += `pkg-config --cflags libmongoc-1.0`
LDFLAGS += `pkg-config --libs-only-L libmongoc-1.0`
LDLIBS += `pgk-config --libs-only-other libmongoc-1.0`
LDLIBS += `pkg-config --libs-only-l libmongoc-1.0`
# Adjusting for this project
SOURCES = main.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECS = main
all: $(EXECS) # Link exec from objects
$(OBJECTS): # Make all .o from .cpp (no local header files)
clean:
-rm $(OBJECTS)
-rm $(EXECS)
# eof
请注意,此处的对象文件仅依赖于源文件。 如果源文件具有一些本地头文件依赖项,则需要手动添加它们。
此文件还确保在链接时,这些-L
开关在目标文件之前,-l
开关在目标文件之后。如果您尝试在LDFLAGS
中仅使用一种pkg-config --libs
,它将不起作用。我也只是在变量中添加一件事 +=
,就像 LDLIBS
一样,因为它可以更容易地看到添加的内容。
内置规则包括:
OUTPUT_OPTION = -o $@
# Compilation for C and C++
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<
COMPILE.cpp = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<
# Linking for C and C++
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
LINK.cpp = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
它有助于了解哪个变量去哪里。
all:main.cpp
g++ -I../../DrAPI/ `pkg-config --cflags --libs libmongoc-1.0` -Wl,--no-as-needed -ldl -lrt -o SampleApp01 $<
clean:
rm -f SampleApp01
当我使用 GTK+ 库编译我的 C 代码时,我创建了一个名为 GTK
的变量,并将其设置为如下所示pkg-config
:
GTK = `pkg-config --cflags --libs gtk+-3.0`
使用以下方法编译代码:
$(CC) $(CFLAGS) $(OBJECTS) $(GTK) -o $@
其中CC = gcc
,CFLAGS
是一些其他编译器标志(如-I ../../DrAPI
),OBJECTS
是源文件和目标文件。
这样,您的生成文件可能如下所示:
DRAPI = `pkg-config --cflags --libs libmongoc-1.0`
all:main.cpp
g++ -I../../DrAPI/ -Wl,--no-as-needed -ldl -lrt $(DRAPI) -o SampleApp01 $<
clean:
rm -f SampleApp01
编辑:忘记这个。使用 CFLAGS
变量和存储pkg-config --cflags [some library, eg. gtk+-3.0]
,使用 LIBS
变量存储pkg-config --libs [some library again]
。现在,您的生成文件可能如下所示:
CFLAGS = -I../../DrAPI/ -Wl,--no-as-needed -ldl -lrt `pkg-config --cflags libmongoc-1.0`
LIBS = `pkg-config --libs libmongoc-1.0`
all:main.cpp
g++ $(CFLAGS) $(LIBS) -o SampleApp01 $<
clean:
rm -f SampleApp01
希望这有帮助!
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 如何将不可编译的配置文件添加到QT工程中?
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 如何将运算符定义从头文件添加到现有结构?
- 如何使jse文件执行编码.exe并静默添加启动?Javascript将文件添加到启动?
- 将内存文件添加到 clang 编译器实例
- 将一个 UI 文件添加到另一个 UI 文件中
- 将STL文件添加到QT小部件
- 如何将几个.cpp文件添加到一个cmakelists.txt中
- 当我尝试将文件添加到另一个文件时出现怪异符号时
- 如何将用户下载的标头文件添加到系统中默认情况下的标题文件列表
- MSBuidel - 将资源文件添加到项目后静态库编译失败
- 将文件添加到C 可执行文件中
- 如何将信息从 txt 文件添加到哈希表
- CMAKE QT创建者:将标题文件添加到项目文件中
- 使用C 将JPG文件添加到输出的HTML文件中
- 找不到构造函数 - 如何将 CPP 文件添加到 Qt 构建过程
- 如何使用 QSettings向我的配置文件添加注释
- 将二进制文件添加到其他人的柯南食谱中
- 如何将文件添加到Android项目中,然后使用NDK加载它