2010-09-06 5 views
7

Je souhaite générer un projet CDT Eclipse avec CMake où le projet Eclipse résultant contient les types de construction définis en tant que configurations de construction sélectionnables à partir de l'EDI.Configurations CMake Eclipse Build

Par exemple:

if(CMAKE_CONFIGURATION_TYPES) 
    set(CMAKE_CONFIGURATION_TYPES PRODUCT_A PRODUCT_B) 
    set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING 
    "Reset the configurations to what we need" 
    FORCE) 
endif() 

SET(CMAKE_C_FLAGS_PRODUCT_A 
    "-DF_ENABLE_FEATURE_A -DF_ENABLE_FEATURE_B 
    ) 

SET(CMAKE_C_FLAGS_PRODUCT_B 
    "-DF_ENABLE_FEATURE_A 
    ) 

En utilisant l'approche ci-dessus, un générateur de projet Visual Studio me donne construis configuriatons pour sélectionner PRODUCT_A product_B et met en évidence correctement le code actif.

Cependant, si je génère un projet Eclipse, la configuration de construction n'existe pas.

Comment puis-je faire en sorte que cela fonctionne pour les projets Eclipse?

Répondre

4

Réponse courte: vous n'avez pas.

Le générateur CDT Eclipse crée une enveloppe autour des Makefiles générés. Les générateurs basés sur Makefile ne peuvent pas être configurés en multi-configuration.

Vous devez utiliser des arbres binaires séparés (notez que les deux peuvent se référer au même arbre source), et utiliser quelque chose comme options pour activer le produit A et/ou d'un produit B:

OPTION(PRODUCT_A "Build product A." OFF) 
OPTION(PRODUCT_B "Build product B." OFF) 
IF(PRODUCT_A AND PRODUCT_B) 
    MESSAGE(SEND_ERROR "Cannot build both product A and B at the same time.") 
ENDIF() 

IF(PRODUCT_A) 
    SET(CMAKE_C_FLAGS 
    "${CMAKE_C_FLAGS} -DF_ENABLE_FEATURE_A -DF_ENABLE_FEATURE_B" 
) 
ENDIF() 

IF(PRODUCT_B) 
    SET(CMAKE_C_FLAGS 
    "${CMAKE_C_FLAGS} -DF_ENABLE_FEATURE_A" 
) 
ENDIF() 
Questions connexes