簡體   English   中英

對於 C 項目,如何有效地修補外部庫並將其編譯到 Makefile 中?

[英]How can I efficiently patch an external library and compile it in a Makefile for a C project?

我正在開發一個需要外部開源庫的 C 項目。 特別是,它需要一個我自己修補的版本,以添加一些需要的功能。

目前我正在使用 Makefile ,它需要./lib文件夾中的補丁庫的靜態編譯版本(我們稱之為libpatched.a ),以及 ./include/libpatched 中相應的./include/libpatched文件。 以下是前面提到的Makefile的主要部分:

EXECNAME=MyExecutable

CC=gcc

SRC_DIR=src
OBJ_DIR=obj

SRC=$(wildcard $(SRC_DIR)/*.c)

OBJ=$(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)

CFLAGS += -Wall -O2 -Iinclude -Iinclude/libpatched
LDFLAGS += -Llib
LDLIBS += -lpatched

.PHONY: all clean

all: $(EXECNAME)

$(EXECNAME): $(OBJ_CC)
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    $(RM) $(OBJ_DIR)/*.o

這個 Makefile 工作正常; 但是,我正在尋找一種更靈活的解決方案,它在調用make之前不需要任何靜態編譯的庫。 我想要完成的是擁有一個 Makefile ,它執行以下操作:

  1. 下載原始庫的特定版本(為了永遠不會有任何兼容性問題)

  2. 使用patch和差異文件 ( .patch ) 應用補丁

  3. 根據原始庫的要求,使用cmake為當前平台編譯補丁庫(靜態或動態)

  4. 使用libpatched編譯我的項目

您認為這些步驟是否有效,或者是否有更好的方法來處理對修補庫的需求?

如果是,因為我根本不是創建 Makefile 的專家,是否有一種簡單的方法可以通過簡單地利用正確編寫的 Makefile 來實現這一目標?

這可能是最好的方法嗎?

非常感謝您提前。

在為我的操作系統 kernel 使用我的補丁構建交叉編譯器等時,我之前已經這樣做了。 您可以在 Makefile 中使用wgetcurl命令。 例如像

# foo.tar.gz needs to be downloaded
foo.tar.gz:
    wget https://download.source.from/here/foo.tar.gz -O foo.tar.gz

# the makefile requires the downloaded file.
foo_src/CMakeLists.txt: foo.tar.gz
    mkdir -p foo_src
    cd foo_src && tar xfz ../foo.tar.gz

# patch the library if flag not present
foo_patched.flag:
    cd foo_src && patch -p1 ../foo.patch
    touch foo_patched.flag

# this depends on patching
libpatched.a: foo_src/CMakeLists.txt foo_patched.flag 
    cd foo_src && cmake
    cp foo_src/libfoo.a libpatched.a

Makefile 格式很簡單 - 不像 CMake : - 規則只是說,“要生成左側的文件。請先在右側構建先決條件。然后執行這些命令來實際生成左側的文件”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM