3

私はこのソリューションを Visual Studio 2008 で維持していますが、成果物は bjam で作成しています。このソリューションには 3 つのプロジェクトが含まれています。jamfiles は、ソリューションの 2 つのバージョン (A と B など) をビルドするようにセットアップされており、各バージョンの 32 ビットおよび 64 ビットの実行可能ファイルをビルドします。

私の問題は、bjam がソリューション内のプロジェクトの 1 つの .h ファイルを見つけられず、以下のエラーが発生することです。これらの .h ファイルは、「include」フォルダー内の 2 つのディレクトリの上と下の 1 つのディレクトリに物理的に配置されています。

プロジェクトの jamfile がある場所に .h ファイルをコピーすると、エラーはなくなり、ソリューションは完全にビルドされます。ただし、.h ファイルは「include」フォルダーに保持する必要があります。

私の質問は、「include」フォルダーで .h ファイルを探すように bjam に指示するにはどうすればよいですか? 以下は、問題のあるプロジェクトの jamfile と、私の site-config.jam ファイルです。

どんなヒントでも大歓迎です。ありがとう。

    -----------------------------------
    ERROR:
    compile-c-c++ Utilities\TemperatureLog\bin\msvc-9.0\small_x86\threading-multi\user-interface-gui\TemperatureLog.obj
    TemperatureLog.cpp
    c:\winirdir\build\winir\utilities\temperaturelog\TemperatureLogDlg.h(50) : error C2653: 'SBF' : is not a class or namespace name
    c:\winirdir\build\winir\utilities\temperaturelog\TemperatureLogDlg.h(50) : error C2143: syntax error : missing ';' before '*'
    c:\winirdir\build\winir\utilities\temperaturelog\TemperatureLogDlg.h(50) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    c:\winirdir\build\winir\utilities\temperaturelog\TemperatureLogDlg.h(50) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    ------------------------------------------

ジャムファイル:

project temperaturelog :
    : requirements <define>_AFXDLL
        <user-interface>gui
    :
    ;

sources = [ glob *.cpp ] TemperatureLog.rc ;

exe TemperatureLog$(suffix) : $(sources)
        /sbfsdk//SbfSdk$(suffix)
    : 
    : small_x86
    ;

exe TemperatureLog$(suffix)_x64 : $(sources)
        /sbfsdk//SbfSdk$(suffix)_x64
    : 
    : small_x64
    ;

exe TemperatureLog$(suffix)_sap : $(sources)
        /sbfsdk//SbfSdk$(suffix)_sap
    :
    : smallSapera_x86
    ;

exe TemperatureLog$(suffix)_sap_x64 : $(sources)
        /sbfsdk//SbfSdk$(suffix)_sap_x64
    :
    : smallSapera_x64
    ;

install dist_x86 : TemperatureLog$(suffix) : 
    <variant>small_x86 : <location>$(installRoot_x86) ;

install dist_x64 : TemperatureLog$(suffix)_x64 :
    <variant>small_x64 : <location>$(installRoot_x64) ;

install dist_sap_x86 : TemperatureLog$(suffix)_sap :
    <variant>smallSapera_x86 : <location>$(installRoot_x86) ;

install dist_sap_x64 : TemperatureLog$(suffix)_sap_x64 :
    <variant>smallSapera_x64 : <location>$(installRoot_x64) ;

--------------------------------

site-config.jam

project site-config ;

path-constant BoostRoot : C:/Boost/boost_1_44_0 ;

lib shlwapi : : <name>shlwapi ;
lib advapi32 : : <name>advapi32 ;
lib gdi32 : : <name>gdi32 ;
lib user32  : : <name>user32 ;
lib ole32 : : <name>ole32 ;
lib vfw32 : : <name>vfw32 ;
lib delayimp : : <name>delayimp ;
lib gdiplus : : <name>gdiplus ;
lib strmiids : : <name>strmiids ;
lib winmm : : <name>winmm ;
lib msvcrt : : <name>msvcrt ;
lib atls : : <name>atls ;
lib ksproxy : : <name>ksproxy ;
lib kernel32 : : <name>kernel32 ;
lib oleaut32 : : <name>oleaut32 ;
lib uuid : : <name>uuid ;
lib htmlhelp : : <name>htmlhelp ;
lib version : : <name>version ;
lib msi : : <name>msi ;

path-constant PleoraRoot : "C:/Program Files (x86)/Pleora Technologies Inc/iPORT Software" ;
lib cyutilslib_x86 : : <name>CyUtilsLib <search>$(PleoraRoot)/Libraries
    :
    : <include>$(PleoraRoot)/Includes
    ;
lib cyutilslib_x64 : : <name>CyUtilsLib64 <search>$(PleoraRoot)/Libraries
    :
    : <include>$(PleoraRoot)/Includes
    ;

path-constant PdvRoot : "C:/EDT/pdv" ;
lib pdvlib_x86 : : <name>pdvlib <search>$(PdvRoot)/lib/x86
    :
    : <include>$(PdvRoot)
    ;
lib pdvlib_x64 : : <name>pdvlib <search>$(PdvRoot)/lib/amd64
    :
    : <include>$(PdvRoot)
    ;

path-constant VceRoot : "C:/Program Files/Imperx/FrameLink Express/SDK" ;
lib vceclb_x86 : : <name>vceclb <search>$(VceRoot)/lib/win32
    :
    : <include>$(VceRoot)/inc
    ;
lib vceclb_x64 : : <name>vceclb <search>$(VceRoot)/lib/x64
    :
    : <include>$(VceRoot)/inc
    ;

path-constant DirectXRoot : "C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)" ;
lib d3dx9_x86 : : <name>d3dx9 <search>$(DirectXRoot)/Lib/x86
    :
    : <include>$(DirectXRoot)/Include
    ;
lib d3dx9_x64 : : <name>d3dx9 <search>$(DirectXRoot)/Lib/x64
    :
    : <include>$(DirectXRoot)/Include
    ;
lib d3d9_x86 : : <name>d3d9 <search>$(DirectXRoot)/Lib/x86
    :
    : <include>$(DirectXRoot)/Include
    ;
lib d3d9_x64 : : <name>d3d9 <search>$(DirectXRoot)/Lib/x64
    :
    : <include>$(DirectXRoot)/Include
    ;

path-constant IfcRoot : "C:/IFC510" ;
lib ifc21 : : <name>ifc21 <search>$(IfcRoot)/lib
    :
    : <include>$(IfcRoot)/include
    ;

path-constant PythonRoot : "C:/Required_Binaries/Python-2.7.1" ;
lib python_x86 : : <name>python27 <search>$(PythonRoot)/PCBuild
    :
    : <include>$(PythonRoot)/Include <include>$(PythonRoot)/PC
    ;
lib python_x64 : : <name>python27 <search>$(PythonRoot)/PCBuild/amd64
    :
    : <include>$(PythonRoot)/Include <include>$(PythonRoot)/PC
    ;

# path-constants work up to here, but not after this, so we use the full path.  Why??
path-constant DirectShowRoot : "C:/Program Files/Microsoft SDKs/Windows/v7.0/Samples/multimedia/directshow/baseclasses" ;
lib Strmbase_x86 : : <name>strmbase <search>"C:/Program Files/Microsoft SDKs/Windows/v7.0/Samples/multimedia/directshow/baseclasses/Release_MBCS"
    :           
    : <include>$(DirectShowRoot)
    ;
lib Strmbase_x64 : : <name>strmbase <search>"C:/Program Files/Microsoft SDKs/Windows/v7.0/Samples/multimedia/directshow/baseclasses/x64/Release_MBCS"
    :           
    : <include>$(DirectShowRoot)
    ;

path-constant SaperaRoot : "C:/DALSA/Sapera" ;
lib SapClassBasic_x86 : : <name>SapClassBasic <search>"C:/Dalsa/Sapera/Lib/Win32"
    :           
    : <include>$(SaperaRoot)/Classes/Basic <include>$(SaperaRoot)/Include
    ;
lib SapClassBasic_x64 : : <name>SapClassBasic <search>"C:/Dalsa/Sapera/Lib/Win64"
    :           
    : <include>$(SaperaRoot)/Classes/Basic <include>$(SaperaRoot)/Include
    ;

path-constant SbfSdkInc  : "C:\WinIRDir\build\WinIR\SbfSdk\include" ;

path-constant ActRoot : "C:/Program Files (x86)/Active Silicon/Phoenix/Win/SDK6.47" ;
lib ActiveSilicon_x86 : : <name>phxlw32 <search>$(ActRoot)/Lib/win32
     :
     : <include>$(ActRoot)/Include
     ;
lib ActiveSilicon_x64 : : <name>phxlx64 <search>$(ActRoot)/Lib/win64
     :
     : <include>$(ActRoot)/Include
     ;
4

1 に答える 1

2

最初のexeルールで次のようなことを試してください:

exe TemperatureLog$(サフィックス)
    : $(ソース)
      /sbfsdk//SbfSdk$(サフィックス)
    : <インクルード>../../インクルード
    : small_x86
    ;

詳細はこちら

それが機能する場合は、ルールごとに複製する代わりに、次のexe方法でルールに移動できる場合がありますproject

プロジェクト温度ログ
    : 要件
      <定義>_AFXDLL
      <ユーザーインターフェース>GUI
      <インクルード>../../インクルード
    ;

次に、このプロジェクトの一部として呼び出されるすべてのルールに適用する必要があります。

于 2012-09-05T23:06:24.090 に答える