我有一个模块化的引导加载程序我正在玩弄。我觉得使用气体比将鼻子移到cmake更麻烦。似乎不是这样。 NAsm无法找到包含文件。我错过了什么?
整个代码可以在This Github Repo
中找到这是项目布局:
.
├── CMakeLists.txt
└── Failing_module
├── CMakeLists.txt
├── Print.inc
└── Stage1
└── Stage1.asm
./的CMakeLists.txt:
cmake_minimum_required(VERSION 3.6)
project(fails C ASM_NASM)
add_subdirectory(Failing_module)
Failing_module /的CMakeLists.txt:
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
编辑 现在应该通过手动方式进行编译。这使它成为SSCCE
答案 0 :(得分:1)
我认为这里的问题是,CMake中的一些严格性与NASM中的缺陷交互不良。 CMake坚持认为搜索路径(例如%include
路径)没有尾部斜杠。 nasm
坚持认为搜索路径(使用-I
选项提供)确实有一个尾部斜杠。 CMake不会改变;它的开发者do not regard this as a CMake bug。他们是对的:nasm
不应该坚持包含路径有一个尾随斜杠。 The nasm
fault已被认识多年。
我设法通过将搜索路径隐藏为普通编译选项来解决此问题:
add_compile_options(-I ${CMAKE_CURRENT_SOURCE_DIR}/ )
add_library( my_lib STATIC "my_source.asm" )