如何使用Jamfile将cpp文件编译为基于工具集的objective-c ++?

时间:2012-06-12 05:16:38

标签: objective-c++ bjam boost-bjam

我有一个Jamfile,其中一个C ++源只能在darwin上编译为Objective-C ++。我怎样才能使这个例子Jamfile只在darwin上编译file2作为Objective-C ++?请注意,使用MM文件扩展名不是解决方案。

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)
;

1 个答案:

答案 0 :(得分: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相同的标志。