2012-06-12 92 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相同的標誌。