我有一个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)
;
答案 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相同的标志。