【问题标题】:Objective C++ support in autotools自动工具中的目标 C++ 支持
【发布时间】:2010-12-22 04:51:01
【问题描述】:

我在 Mac OS X 10.6.5 下工作 自动配置 2.68 版 自动制作版本 1.11.1 在使用 autoconf、automake 构建的大型项目中,我需要将 .mm 文件添加到库源中。当我将它们添加到 library_SOURCES 变量时,即使我使用了它们也不会编译

AS_IF([test "$with_target" = "quartz"], [AC_PROG_OBJCXX])

在我的 configure.ac 中。测试成功并输出事件

checking whether we are using the GNU Objective C++ compiler... yes

和 .mm 文件无法编译。我在哪里可以解决这个问题?

【问题讨论】:

    标签: autotools objective-c++


    【解决方案1】:

    我用自定义后缀规则解决了这个问题:

    $ cat Makefile.am
    
    .mm.o :
      $(CXXCOMPILE) -x objective-c++ -с $< -o $@
    
    bin_PROGRAMS = foo
    foo_SOURCES = foo.mm bar.m baz.cpp
    

    顺便说一句,如果将 *.mm 中的 *.o 放入库中,我无法正确链接目标二进制文件。

    【讨论】:

    • 感谢您的回答。我终于使用了后缀规则,但我也需要将它链接到库中。它链接了,但是在 .mm 文件中定义的代码中开始出现一些奇怪的运行时问题,例如 2 个具有相同签名但位于不同内存地址的构造函数,以及覆盖代码中不知道此类的类成员。您在将 mm 链接到库时遇到了什么问题?
    • automake 似乎还没有明确支持 ObjC++。
    • 如何将特定于目标的标志传递给该目标?我的意思是,假设我有两个目标,它们都包含 .mm 源,现在我想将他们的 OBJCFLAGS 传递给这个新的 .mm.o: 目标。我怎样才能做到这一点?由于特定于目标的标志像 target_name_OBJCFLAGS 一样存储,但是这个 .mm.o 目标应该服务于不同的程序目标......
    • 对于那些感兴趣的人:我最终为objective-c源创建了一个单独的文件夹并编写了简单的Makefile.am,它具有noinst_LIBRARIES目标,它将所有.mm源构建到.a存档中添加到顶级 Makefile.am 中的 program_LIBADD 标志,以便可以将主应用程序链接到它。
    • @peetonn 你能发布一些关于你是如何做到的 sn-p 代码吗?
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多