我正在尝试熟悉cmake
,我选择了一个非常简单的业余内核,用汇编作为试验台。问题是,似乎在编译源代码之前调用了链接器,我收到了这个错误:
$ make
[100%] Linking ASM-ATT executable kernel
/usr/bin/ld: no input files
CMakeFiles/kernel.dir/build.make:69: recipe for target 'kernel' failed
make[2]: *** [kernel] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/kernel.dir/all' failed
make[1]: *** [CMakeFiles/kernel.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
这是CMakeLists.txt文件:
cmake_minimum_required(VERSION 2.8)
project(kernel ASM-ATT)
enable_language(ASM-ATT)
set(CMAKE_ASM-ATT-COMPILER as)
set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/linker.ld)
set(CMAKE_EXE_LINKER_FLAGS "-N -T${LINKER_SCRIPT}")
add_executable(${CMAKE_PROJECT_NAME}
multiboot.S
start.S
)
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
LINK_DEPENDS "${LINKER_SCRIPT}"
LINKER_LANGUAGE ASM-ATT
)
我认为这里有一些显而易见的东西。使用自定义链接描述文件构建程序集的正确方法是什么?
答案 0 :(得分:1)
使用CMake,错误消息
/usr/bin/ld: no input files
通常意味着CMake不会将任何文件作为源文件传递给add_executable
/ add_library
命令。
在给定的情况下,CMake不会将.S
文件视为ASM-ATT语言的汇编程序文件。 Wiki page描述了与CMAKE的汇编,明确指出:
.S文件,即不支持预处理的汇编程序文件
如果您的汇编程序文件不需要预处理,您可以将它们重命名为.s
或.asm
个文件,因此CMake会将它们视为给定语言的源文件。