11

私はソースコードを持っています:

#include <linux/module.h>   
#include <linux/kernel.h>   

int init_module(void)
{
    printk(KERN_INFO "Hello world %i\n", BUILD_NUMBER);
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

およびメイクファイル:

obj-m += hello-1.o

BUILD_NUMBER := 42

# How to pass BUILD_NUMBER to hello-1.c ???

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

BUILD_NUMBER パラメーターを makefile からソース コードに渡すにはどうすればよいでしょうか。

4

3 に答える 3

11

Linux ビルド システムは、合理的に変更できないカーネル提供の Makefile を使用するためです。Makefile ではなく、ソース コードにバージョン番号を直接記載することをお勧めします。

可能性が考えられます。CPPFLAGS環境変数を定義できます。これは、カーネル Makefile によって C コンパイラ コマンド ラインに渡される必要があります。この CPPFLAGS 変数を として定義すると、ソース ファイル内で-DVERSION=42このVERSIONマクロを使用できる可能性があります。

all:
    CPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

CPPFLAGS「C PreProcessor FLAGS」の略であることに注意してください。C++ とは無関係です。

それをテストした後。これは動作しません。ただし、解決策があります。カーネル Makefile は、独自の CPPFLAGS を定義したカーネル Makefile に追加される KCPPFLAGS 環境変数の定義を許可 (および使用) します。

以下を使用する必要があります。

all:
    KCPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD) 
于 2013-03-15T11:24:07.150 に答える
0

追加してみてください:

-DBUILD_NUMBER=$(BUILD_NUMBER)

コンパイラー・パラメーターに。これは、コードBUILD_NUMBERで aを定義するのと同じ効果があるはずです。#define

于 2013-03-15T11:22:54.877 に答える