【发布时间】:2023-12-31 01:19:01
【问题描述】:
我正在尝试使用CMake 编译nasm 源文件,并且对后缀有一些误解。默认情况下CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS 的值是nasm;asm,所以我希望*.S 被CMake 识别为ASM_NASM 文件。设置
set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS "${CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS};S")
似乎不起作用。这是完整的CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(casm)
enable_language(ASM_NASM)
set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS "${CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS};S")
set(CMAKE_ASM_NASM_COMPILE_OPTIONS "${CMAKE_ASM_NASM_COMPILE_OPTIONS} -f elf64 -g")
add_executable(min main.c min.S)
打印以下错误:
CMake Error: CMake can not determine linker language for target: min
CMake Error: Cannot determine link language for target "min".
虽然只是将 min.S 重命名为 min.asm 并将添加可执行文件替换为
add_executable(min main.c min.asm)
工作得很好:
Scanning dependencies of target min
[ 33%] Building C object CMakeFiles/min.dir/main.c.o
[ 66%] Building ASM_NASM object CMakeFiles/min.dir/min.asm.o
[100%] Linking C executable min
[100%] Built target min
我也尝试set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS "") 没有任何效果,所以用户对该属性的设置是否被忽略了?
【问题讨论】:
-
你没有告诉 CMake 你的项目的“主要”语言是什么,所以它不能真正推断出如何链接你的可执行程序。在
project命令中添加LANGUAGES子句。 -
您只启用了
ASM_NASM语言,而不是C语言。您需要启用要使用的所有种语言。 -
@Someprogrammerdude 经过一番调查,我认为这是一个
ASM_NASM错误。