私は気になるモジュラーブートローダを持っています。私はcmakeに鼻を移植するよりも、ガスを使用するように設定するのは痛みが増えるだろうと感じました。そんなことではないようです。 NAsmはインクルードファイルを見つけることができません。私は何が欠けていますか?なぜcmakeからインクルードステートメントが見つからないのですか?
cmake_minimum_required(VERSION 3.6)
project(fails C ASM_NASM)
add_subdirectory(Failing_module)
Failing_module/CMakeLists.txt:
.
├── CMakeLists.txt
└── Failing_module
├── CMakeLists.txt
├── Print.inc
└── Stage1
└── Stage1.asm
./CMakeLists.txt:
コード全体がここ
This Github Repoで見つけることができ、プロジェクトのレイアウトである
enable_language(ASM_NASM)
set(CMAKE_ASM_NASM_OBJECT_FORMAT bin)
set(module_SRCS Stage1/Stage1.asm)
set(CMAKE_NASM_LINK_EXECUTABLE nasm)
add_executable(Stage1.bin ${module_SRCS})
set_target_properties(Stage1.bin PROPERTIES LINKER_LANGUAGE NASM)
install(TARGETS Stage1.bin DESTINATION bin)
Failing_module /ステージ1/Stage1.asm:
bits 16
jmp main
%include "Print.inc"
msgHello db "Hello World", 0x00
main:
mov s, msgHello
call Print
Failing_module/Print.inc
Print:
lodsb
or al, al
jz PrintDone
mov ah, 0x0E
int 0x10
jmp Print
PrintDone:
ret
cmakeのの出力は以下の通りです:
Failing_module/Stage1/Stage1.asm:6: fatal: unable to open include file `Print.inc'
make[2]: *** [Failing_module/CMakeFiles/Stage1.bin.dir/build.make:63: Failing_module/CMakeFiles/Stage1.bin.dir/Stage1/Stage1.asm.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:86: Failing_module/CMakeFiles/Stage1.bin.dir/all] Error 2
make: *** [Makefile:128: all] Error 2
EDITコンパイルする必要があります手作業で今すぐこれはSSCCEになります
正確なファイル名 'Print.inc'は' Failing_module'ディレクトリに特異的に存在しているあなたは絶対に確認してください?このエラーを過ぎても、あなたのコードはアセンブルされません。これは無効な 'mov si 'Hello World"です。 'Hello World'でラベルの後に(コードの後に)バイト文字列を作成し、そのラベルの名前を' mov si、hello'のように使用する必要があります。 –
Print.incが実際にはそれを正しい場所に名づけました。私はこれを例として書いた。私は実際のコードを手作業でコンパイルしています。 –
これは、あなたが得るエラーメッセージであり、何か他のものではないことを確かめます。あなたが与えたNASMファイルの最初のものが、不適切な構文を持つので、アセンブルした方法はありません。 –