【问题标题】:Linking a .s file with CMake使用 CMake 链接 .s 文件
【发布时间】:2013-06-27 06:41:55
【问题描述】:

我有一个我想使用的 c 函数,但它是使用 Intel 编译器而不是 gnu C 编译器编译的。我正在使用cmake 来构建程序。 (我实际上使用的是ROS,因此是rosmake,但基础是cmake,所以我认为它更多的是cmake问题而不是ROS问题)。 假设使用icc 构建的文件是x.c 并生成一个x.s 文件。我想在我的文件y.cpp 中使用来自x.c 的函数a()。 在y.cpp 我有:

#include "x.h" 
..... 
call a() 

如果CMakeLists.txt

rosbuild_add_executable(y y.cpp x.c)

rosbuild_add_executable is analogous to add_executable(...) 

但如果我用icc 构建x.c 并尝试包含x.s 文件:

rosbuild_add_executable(y y.cpp x.s) 

它不起作用。我应该对在y.cpp 中调用a() 的方式进行一些更改吗?还是有其他方法可以链接它。

【问题讨论】:

    标签: gcc cmake icc ros


    【解决方案1】:

    使用 gcc 时,您可以使用 C 编译器编译 .S 文件(无需显式调用 asm)。可以告诉 CMake 这样做使用

    set_property(SOURCE <myfile>.S PROPERTY LANGUAGE C)
    

    对于您的每个 .S 文件。

    【讨论】:

    • 您知道一般将 S 文件与 gcc 关联的方法吗?就像在makefile中一样,它会沿着.S.o: $(CROSS_COMPILER)gcc $(CFLAGS) -c $
    【解决方案2】:

    要使用 .s 文件,您必须在 CMake 中使用 enable_language 启用汇编语言支持。

    您可以在这里找到更多信息:https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/languages/Assembler

    【讨论】:

    • 谢谢@Guillaume。从那我假设我必须启用相应的汇编语言,然后只需简单地将文件链接到可执行文件中。但我真的很确定我在这里遗漏了一些东西。我应该在 .cpp 文件中做些什么吗?
    • @canatan 启用语言并将.s 文件添加到您的add_executable 调用中就足够了。我唯一不确定的是 CMake 是否支持英特尔汇编语言/编译器,因为文档中仅有的两种语言是 ASM-ATT 和 ASM_MASM。
    • 一位同事查看了 .s 文件并说它的 ASM-ATT .. 当我做一个简单的链接时,它给了我以下错误,我假设这是特定于 ROS > /usr/ bin/as: 无法识别的选项 '->OS_PACKAGE_NAME="landshark_dwaICCIntegration"'
    • 这很奇怪......你确定你没有在你的 CMakeLists 中设置 OS_PACKAGE_NAME 吗?
    • 我正在使用 ROS,它使用 rosbuild,我认为它使用 CMAKE ros.org/wiki/rosbuild/CMakeLists/Examples .. 我认为它是 ROS 的东西 ..
    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多