gpt4 book ai didi

linux - 向 c makefile 添加额外的源目录

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:15 25 4
gpt4 key购买 nike

抱歉,如果这是菜鸟问题。

在我的 c 函数中,我使用了 btrfs_inode.h 文件中定义的宏。
当我将文件直接包含到路径中时:

#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/btrfs_inode.h"

项目编译没有错误,我不想使用那个直接路径,我下载了包含这个头文件的包 kernel-source。
安装包后的头文件位置在:/usr/src/linux/fs/btrfs/

所以我将#include 更改为:

#include "btrfs_inode.h"

我希望添加“/usr/src/linux/fs/btrfs/”作为搜索“btrfs_inode.h”的位置并获取:“/usr/src/linux/fs/btrfs/btrfs_inode .h”

我得到错误:
/bin/sh: 1:/usr/src/linux/fs/btrfs/: 权限被拒绝

我正在以 root 身份运行 make。

生成文件:

all:: user

obj-m += my-driver.o


# Make arguments
PWD := $(shell pwd)
INCLUDE := -I/usr/include/asm/mach-default/
KDIR := /lib/modules/$(KERNEL_HEADERS)/build;/usr/src/linux/fs/btrfs/


# Add flags to auto build
EXTRA_CFLAGS +=-D__Linux -std=gnu99

# extra warning flags
ccflags-y := -Wall -Wextra #-pedantic
# disable some warning flags
ccflags-y += -Wno-unused-parameter
# make all warnings into errors
ccflags-y += -Werror
# increase verbosity
KBUILD_VERBOSE := 1

all::
$(MAKE) -C $(KDIR) $(INCLUDE) SUBDIRS=$(PWD) modules

最佳答案

所以首先,尽可能避免使用 root 权限。接下来,您将目录添加到 KDIR,而不是 INCLUDE(然后将 KDIR 传递给 -C make 的参数,所以你会有一行看起来像:

make -C /lib/modules/$(KERNEL_HEADERS)/build;/usr/src/linux/fs/btrfs/ ...

注意分号,bash 会将其解释为命令的结尾和下一个命令的开始。因此它会尝试运行 make,然后尝试运行 /usr/src/linux/fs/btrfs/,并向您发出警告。你应该拥有的是这样的:

# Make arguments
PWD := $(shell pwd)
INCLUDE := -I/usr/include/asm/mach-default/
INCLUDE += -I/usr/src/linux/fs/btrfs/
KDIR := /lib/modules/$(KERNEL_HEADERS)/build

(您需要在路径前加一个 -I 来告诉 make 在该目录中搜索包含文件)。

编辑

您也没有将 -I 传递给您的 $(CC)$(CXX) 命令。为此,您有几个选择,但我会建议最不容易出错的一个:首先,您必须将标志传递给子品牌。为此,首先添加以下行:

export INCLUDE

到你的主生成文件。您的 submake 现在可以访问变量 $(INCLUDE)。从那里,如果您有编译 CC 文件的明确规则,您可以将 $(INCLUDE) 添加到编译命令。有点像

%.o: %.c
$(CC) $(CFLAGS) $(INCLUDE) -o $@ $<

或者,如果您使用内置的隐式规则,只需将 $(INCLUDE) 添加到 CPP_FLAGS:

CPP_FLAGS += $(INCLUDE)

(注意,CPP_FLAGS 默认用于 c 和 c++ 编译)。

最后,不要$(INCLUDE) 传递给您的make 命令。如果这样做,它会告诉 make 在这些目录中查找子 makefile(不是 gcc...)。

关于linux - 向 c makefile 添加额外的源目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com