我不太清楚你想要什麼,但有很多可能性。
答:您總是希望用定義的SOMEMACRO宏進行編譯。在這種情況下,對於Jamfile的項目中添加
project
: requirements # These are requirements for this project
# If compiling debug, define SOMEMACRO
<variant>debug:<define>SOMEMACRO
: usage-requirements
# These are requirements projects using this project must have
<variant>debug:<define>SOMEMACRO
;
如果您需要SOMEMACRO始終定義,你可以刪除<variant>debug:
條件。如果您需要設置其他標誌,則可酌情使用<cflags>
,<cxxflags>
和。
B.你想要一個快速切換來打開你的標誌/定義,也許在默認情況下,也許不是,並且與它一起構建與它的構建不兼容。在這種情況下,你需要一個功能。
import feature ;
feature.feature steves-feature : off on
: composite propagated link-incompatible ;
feature.compose <steves-feature>on : <define>SOMEMACRO ;
feature.feature
該規則定義了具有兩個可能的值和三個屬性稱爲<steves-feature>
特徵。 composite
表示它是由其他功能組成的功能(在本例中爲<define>SOMEMACRO
)。 propagated
意味着包含具有此功能集的目標的任何目標也將具有此功能集。而link-incompatible
表示帶有<steves-feature>on
的目標不能與<steves-feature>off
的目標組合。 (因此,的bjam將把創建的文件,如果此功能是通過任何目標定名爲steves-feature-on
或steves-feature-off
目錄下。)
此功能可用於就像在上述項目中的規則中使用的<define>
功能部分。 (您甚至可以將它添加到項目規則的default-build
部分。)
請注意,您還可以從命令行設置功能:bjam steves-feature=on
。你想要一個完整的變體。我認爲這個想法是,如果你有一些共同的構建配置與一堆應該設置在一起的不同功能。那麼,如果你已經創建了上述功能,現在這很簡單。
variant steves-debug : debug : <steves-feature>on ;
這種變異將是一樣的debug
變異,但與附加功能<steves-feature>on
。
我從來沒有使用variant
規則,所以它可能需要從某處導入。此外,你也許可以做
variant steves-debug : debug : <define>SOMEMACRO ;
但我不知道如果bjam會創建目錄結構或不。 (它可能會。)
謝謝,案例B或C可能是我正在尋找的,我會先嚐試B,因爲它是最簡單的。感謝您的詳細解釋。 – 2010-04-27 01:02:40
如果這可行,您應該點擊答案旁邊的複選標記將其標記爲已回答。這樣其他人知道這個問題得到了回答。我得到一些信用。 :-)(你在前面的問題上還沒有接受過答案。) – AFoglia 2010-04-27 15:13:03
道歉,我現在選擇了它,我還是習慣了這個協議。 – 2010-07-11 03:28:45