2012-06-12 58 views
0

我有一个Jamfile,其中一个C++源代码必须在达尔文上编译为Objective-C++。我如何才能使这个例子Jamfile在darwin上编译file2作为Objective-C++?请注意,使用MM文件扩展名不是这里的解决方案。如何根据使用Jamfile的工具集将cpp文件编译为objective-C++?

import modules ; 
import os ; 

ECHO "OS =" [ os.name ] ; 

SOURCES = 
file1 
file2 # How do I compile this file as objective-c++ on darwin only? 
file3 
; 

local usage-requirements = 
<include>./include 
; 

project someproject ; 

lib someproject 

: # sources 
src/$(SOURCES).cpp 

: # requirements 
<threading>multi 
$(usage-requirements) 

: # usage requirements 
$(usage-requirements) 
; 
+0

我不知道果酱,但对于GCC(或铛),你基本上只需要添加标志'-x objective-C++'到编译器命令行。这应该可以减少您的问题,从而确定如何在Jam脚本中以每个平台为基础向编译器命令行添加标志。 – pmdj

回答

1

我没有一个完整的答案,但传统的方法是使一个新的规则来编译.cpp文件,Objective-C的目标文件。你会想看看文档的Extender Manual部分来弄清楚如何做到这一点,但这并不简单,特别是因为该方法取决于工具包。

更简单的方法是在制作目标文件时只添加编译标志。 (下面未经测试的代码...)

import modules ; 
import os ; 

ECHO "OS =" [ os.name ] ; 

local usage-requirements = 
    <include>./include 
    ; 

# By putting the (usage) requirements in the project, 
# they automatically apply to all targets 
project someproject 
    : <threading>multi 
    $(usage-requirements) 
    : 
    : $(usage-requirements) 
    ; 

lib someproject 
    : # sources 
    src/file1.cpp 
    src/file3.cpp 
    file2.o 
    ; 

obj file2.o 
    : src/file2.cpp 
    : <toolset>gcc:<cxxflags>"-x objective-c++" 
    ; 

(假设pmjordan's suggested flags是正确的。)更改工具集和标志为适当(或添加适当的行)。

hacky部分是上面的jamfile只能在gcc下正常工作。与其他编译器一起,它将以cpp模式编译。如果您删除了<toolset>gcc:部件,则使用其他编译器将会失败,除非它们也识别与gcc相同的标志。