【问题标题】:Cannot build CLion project with .asm file无法使用 .asm 文件构建 CLion 项目
【发布时间】:2019-12-30 00:26:26
【问题描述】:

Linux 上运行CLion,我一直在尝试让.asm 文件正常工作。这就是我的测试项目的样子(它在Windows/Mac 上工作100%,只需要在.asm 文件中添加.intel_syntax)。

安装了NASM Assembly Support 插件。

main.c:

#include <stdio.h>

extern long tes(long);

int main() {
    printf("%ld", tes(5));
    printf("Hello, World!\n");
    return 0;
}

tes.asm:

.text:

.global tes

tes:
    mov rax, edi
    ret

CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)
project(Testt C)
enable_language(C ASM)

set(CMAKE_C_STANDARD 99)

set ( SOURCES 
        main.c 
        tes.asm)

add_executable(program  ${SOURCES} )

如何配置CLion 以便在C 中使用tes 作为方法?我期待tes(x) = x,但不知何故,我的项目没有编译:

 ====================[ Build | program | Debug ]=================================
/snap/clion/99/bin/cmake/linux/bin/cmake --build /home/user/CLionProjects/Testt/cmake-build-debug --target program -- -j 4
make: *** No rule to make target 'program'.  Stop.

感谢任何帮助!

【问题讨论】:

  • 我知道你没有问过这个问题,也没有问到那么远,但是为了将来参考:由于多种原因,你的代码不会与 nasm 组装在一起。
  • 感谢您告诉我,我很困惑,因为它今天在 Windows 和 Mac 上完美运行。为什么它不起作用?您如何建议集成 .asm 文件?
  • 很遗憾,我无法为您提供 cmake 方面的帮助。但.global 不是 nasm 语法(删除前导点),mov rax, edi 由于寄存器大小不同而无效。 .text: 也是一个标签,您可能是指 section .text(但无论如何这是默认值)。
  • 我试过了,还是不行。不过,它可以在 Mac 上运行。
  • 您不需要启用 C,因为无论如何它都已启用。

标签: c assembly cmake x86-64 clion


【解决方案1】:

你需要使用

enable_language(ASM_NASM)

不确定 CMake 规则是否会识别 .asm 扩展名,在这种情况下您可能需要添加

set_source_files_properties(${ASM_SOURCES} PROPERTIES LANGUAGE ASM_NASM)

刚刚创建了这些文件,它们使用 MKSYS MSYS 和 gcc 9 和 nasm 2.14:

main.c

#include <stdio.h>

extern long test(long);

int main()
{
    printf("%ld", test(5));
    printf("Hello, World!\n");
    return 0;
}

test.asm

section text

global test

test:
    mov rax, 0
    ret

CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(Test)
enable_language(ASM_NASM)

set(CMAKE_C_STANDARD 99)

set(ASM_SOURCES
     test.asm
)

set (SOURCES
     main.c 
     ${ASM_SOURCES}
)

set_source_files_properties(${ASM_SOURCES} PROPERTIES LANGUAGE ASM_NASM)

add_executable(program  ${SOURCES})

【讨论】:

  • 谢谢!第一个命令没有改变任何东西,第二个命令抛出一条错误消息,要求使用 CMake NASM 编译器。这可能是问题所在。它要求这些文件: CMakeDetermineNASMCompiler.cmake CMakeNASMCompiler.cmake 和变量 CMAKE_NASM_COMPILER_ENV_VAR CMAKE_NASM_COMPILER 这个 NASM 编译器在哪里?
  • 您可以查看您的 cmake 安装文件夹。应该有一个 modules 目录,其中包含 CMake 已知的所有编译器。检查名称中是否有一些带有 NASM 的文件。 IE。我安装了 CMake 3.15 并且有“CMakeASM_NASMInformation.cmake”,这意味着在这种情况下语言名称是“ASM_NASM”。我认为这些文件应该与 CMake 一起安装。您是否使用带有下划线的“ASM_NASM”?如果 cmake 抱怨 CMakeDetermineNASM... 这意味着您使用“NASM”作为语言,因为 cmake 正在寻找它。
猜你喜欢
  • 2018-03-26
  • 2020-08-05
  • 1970-01-01
  • 2018-03-07
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多