0

我有一个 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)
;
4

1 回答 1

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 建议的标志是正确的。)根据需要更改工具集和标志(或添加适当的行)。

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

于 2012-07-27T02:53:59.113 回答