cmake程序集:/ usr / bin / ld:没有输入文件

时间:2016-04-07 04:26:10

标签: assembly cmake linker-scripts

我正在尝试熟悉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
    )

我认为这里有一些显而易见的东西。使用自定义链接描述文件构建程序集的正确方法是什么?

1 个答案:

答案 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会将它们视为给定语言的源文件。