0

私はJamfileを持っており、C++ソースの1つはダーウィンでのみObjective-C++としてコンパイルする必要があります。この例のJamfileに、darwinでのみObjective-C ++としてfile2をコンパイルさせるにはどうすればよいですか?ここでは、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ファイルを目的の c オブジェクト ファイルにコンパイルする新しいルールを作成することです。その方法を理解するには、ドキュメントのエクステンダー マニュアルの部分を参照する必要がありますが、特に方法がツールキットに依存するため、単純ではありません。

より簡単なハックは、オブジェクト ファイルを作成するときにコンパイル フラグを追加することです。(以下の未テストのコード...)

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 の提案するフラグが正しいと仮定します。) ツールセットとフラグを適切に変更します (または適切な行を追加します)。

ハックな部分は、上記の jamfile が gcc でのみ正しく動作することです。他のコンパイラでは、cpp モードでコンパイルされます。この部分を削除する<toolset>gcc:と、gcc と同じフラグを認識しない限り、他のコンパイラの使用は失敗します。

于 2012-07-27T02:53:59.113 に答える