質問:acファイルに2つのマクロを追加し、2つのコンピュータがあります。 Yoctoレシピを使用して、特定のマシン用の特定のマクロでコードを書きたいです。
問題をサブ部分に分割します。 こんにちはc
// Simple hello.c program
#include<stdio.h>
void main(){
printf("Hello World!\n");
//Introducing Macro 1 -- abc
#ifdef abc
printf("Day 1\n");
#endif
//Introducing Macro 2 -- xyz
#ifdef xyz
printf("Day 2\n");
#endif
}
予想および観察された出力:
gcc hello.c -o hello
./hello
Hello World!
gcc hello.c -Dabc -o test1
./test1
Hello World!
Day 1
gcc hello.c -Dxyz -o test2
./test2
Hello World!
Day 2
ファイルコンテンツの作成:
obj-m := hello.o
SRC := ${shell pwd}
CFLAGS += -Dabc
all:
${MAKE} -C M=${SRC} ${CFLAGS}
test_install:
${MAKE} -C M=${SRC} ${CFLAGS} test_install
clean:
rm -rf *.o
上記のMakefileの内容はcat -e -t Makefile
。各行の終わりで$で正しく終了します。私はMAKEを使用しているので、gccコンパイラがあります。 Makefileでコードがそれに応じてコンパイルされたら、別のCFLAGS = "-Dxyz"を処理するためにMakefileにifeq条件を追加できるようにCFLAGS = "-Dabc"をハードコードしました。
レシピファイルの内容:
S = "${WORKDIR}/helloworld/hello"
COMPATIBLE_MACHINE = "oldmachine|newmachine"
EXTRA_OEMAKE_oldmachine += "CFLAGS=-Dabc"
EXTRA_OEMAKE_newmachine += "CFLAGS=-Dxyz"
do_compile(){
${EXTRA_OEMAKE}_${MACHINE}
}
do_compile の基本機能は oe_runmake を実行することです。これは、渡したい CFLAGS を選択すると仮定します。
tmp / work / ...フォルダの下のlog.do_compileの内容を確認しましたが、CFLAGSが使用されていることがわかりませんでした。
私も上記のレシピを次のように書き直しました。
do_compile_append_oldmachine(){
CFLAGS="-Dabc"
}
do_compile_append_newmachine(){
CFLAGS="-Dxyz" #Also tried passing EXTRA_OEMAKE_MACHINE as above
}
これにより、tmp/work/.. ディレクトリにある log.do_compile ファイルを確認すると、CFLAGS 部分が見つかりません。
特定のアーキテクチャに基づいてコードをコンパイルするためにCFLAGSをどのように使用できますか?
追加の詳細:
特定のメタレイヤーの下にこのようなディレクトリがあります。
こんにちは世界
- こんにちはc
- こんにちは。o
- ファイルの生成
注:CFLAGSは表現力が低いため、このタグでは追加できません。