2010-04-26 12 views
5

He intentado leer la documentación, pero es bastante impenetrable, así que espero que alguien pueda tener una respuesta simple. Quiero definir una nueva 'variante', basada en 'depurar', que solo agrega algunas definiciones de macro a la línea de comando del compilador, por ejemplo, "-DSOMEMACRO". Creo que puedo hacer esto como una "subvariante" de depuración, o simplemente definir una nueva variante copiando 'depuración', pero ni siquiera estoy seguro de dónde hacer esto. Parece que feature.jam en $ BOOST_BUILD_DIR/build puede ser el lugar. Quizás lo que realmente quiero es simplemente una nueva 'característica', pero todavía no está claro para mí exactamente qué debo hacer y dónde, y no sé si una 'característica' me permite dirigir los productos de compilación a un directorio diferente a la compilación 'depurar'.cómo crear una nueva variante en bjam

Cualquier sugerencia será apreciada. (En caso de que se lo pregunte, tengo que usar bjam ya que ha sido adoptado como nuestro estándar corporativo.)

Respuesta

7

No estoy muy seguro de lo que quiere, pero hay una serie de posibilidades.

A. Siempre desea compilar con la macro SOMEMACRO definida. En cuyo caso, en el Jamfile para su proyecto de complemento

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 
    ; 

Si necesita SOMEMACRO siempre se define, puede eliminar la condición <variant>debug:. Si necesita establecer otros indicadores, puede usar <cflags>, <cxxflags> y según corresponda.

B. Quiere un cambio rápido para activar sus flags/definir, quizás de forma predeterminada, quizás no, y las compilaciones con él no son compatibles con las compilaciones que no están activadas. En cuyo caso quieres una función.

import feature ; 
feature.feature steves-feature : off on 
    : composite propagated link-incompatible ; 
feature.compose <steves-feature>on : <define>SOMEMACRO ; 

La regla feature.feature define una función denominada <steves-feature> con dos valores posibles y tres propiedades. composite significa que es una característica compuesta de otras características (en este caso <define>SOMEMACRO). propagated significa que cualquier objetivo que incluya un objetivo con este conjunto de características también tendrá esta característica configurada. y link-incompatible significa que los objetivos con <steves-feature>on no se pueden combinar con objetivos con <steves-feature>off. (Como resultado, bjam pondrá los archivos creados bajo un directorio llamado steves-feature-on o steves-feature-off si esta característica es fijado por cualquier objetivo.)

Esta característica se puede utilizar igual que la característica <define> utilizado en la regla de proyectos en los anteriores sección. (Incluso puede agregarlo a una sección default-build de la regla del proyecto.)

Tenga en cuenta que también puede establecer funciones desde la línea de comandos: bjam steves-feature=on.

C. Quiere una variante completa. Creo que la idea es si tienes algunas configuraciones comunes de compilación con un montón de características diferentes que se deben configurar juntas. Bueno, si ya ha creado la función como se indica arriba, ahora es fácil.

variant steves-debug : debug : <steves-feature>on ; 

Esta variante será la misma como la variante debug pero con la característica adicional <steves-feature>on.

Nunca utilicé la regla variant, por lo que podría necesitar ser importada de alguna parte.Además, es posible que pueda hacer

variant steves-debug : debug : <define>SOMEMACRO ; 

pero no sé si bjam creará la estructura del directorio o no. (Probablemente lo hará).

+0

Gracias, caso B o tal vez C es lo que estoy buscando, probaré B primero porque es el más simple. Gracias por una explicación muy detallada. –

+0

Si esto funciona, debe hacer clic en la marca de verificación junto a la respuesta para marcarla como respondida. De esa manera, otros saben que la pregunta está respondida. Y obtengo algo de crédito. :-) (Tampoco ha respondido a sus preguntas anteriores) – AFoglia

+0

Disculpas, ahora lo he seleccionado, todavía me estoy acostumbrando al protocolo. –

Cuestiones relacionadas