2010-09-06 6 views
7

Я хочу создать проект Eclipse CDT с CMake, где результирующий проект Eclipse содержит определенные типы сборки в качестве настраиваемых конфигураций сборки из среды IDE.Конфигурации сборки CMake Eclipse

Например:

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 
    ) 

Используя вышеупомянутый подход, генератор Visual Studio проект дает мне построить configuriatons выбрать PRODUCT_A product_B и выделяет активный код правильно.

Если, однако, я создаю проект Eclipse, то конфигурации сборки там нет.

Как я могу заставить это работать для проектов Eclipse?

ответ

4

Короткий ответ: вы этого не сделаете.

Генератор CDT Eclipse создает обертку вокруг созданных Makefile. Генераторы на основе файлов Makefile не могут быть многоконфигурированными.

Вы должны будете использовать отдельные бинарные деревья (заметим, что оба могут вернуться к той же дереве исходного кода), и использовать что-то вроде вариантов для того, чтобы продукт А и/или продукт В:

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()