CMake: la Statique et la liaison dynamique basée sur BUILD_TYPE

Je suis en train d'élaborer un petit logiciel de simulation qui dépend de deux bibliothèques, la GSL et la libconfig. Comme un système de build, j'utilise CMake. Pour la GSL et libconfig, j'ai trouvé cmake fichiers et copiées dans le cmake/ répertoire de mon projet.

Le scénario est le suivant: je veux avoir plusieurs différents types, comme les debug, release, etc., mais aussi un programme personnalisé appelé cluster, qui ajoute -static à la CCG des drapeaux et des liens à l'encontre de la .a bibliothèques de la GSL et la libconfig, qui, je suppose exister.

Mon CMakeLists.txt ressemble à ça pour l'instant:

# version
SET(PACKAGE_VERSION "1.0")
SET(PACKAGE_NAME "INTERFACE")

PROJECT(interface C CXX)

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)


# dirs -----------------------------------------------------

SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")

FIND_PACKAGE(GSL REQUIRED)
INCLUDE_DIRECTORIES(${GSL_INCLUDE_DIRS})
SET(LIBS ${LIBS} ${GSL_LIBRARIES})

FIND_PACKAGE(LibConfig REQUIRED)
INCLUDE_DIRECTORIES(${LIBCONFIG_INCLUDE_DIRS})
SET(LIBS ${LIBS} ${LIBCONFIG_LIBRARIES})

CONFIGURE_FILE("res/config.h.in" "config.h")
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})

SET_DIRECTORY_PROPERTIES(PROPERTIES 
    ADDITIONAL_MAKE_CLEAN_FILES "config.h"
)


# compilation ----------------------------------------------

ADD_EXECUTABLE( interface
    interface.c interface.h config.h
    helpers.c 
    output.c
    lattice.c 
    genetic.c
)

# optional CFLAGS
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic -std=c99")
SET(CMAKE_C_FLAGS_RELEASE "-O3 -ffast-math")
SET(CMAKE_C_FLAGS_CLUSTER "-O3 -ffast-math -static")
SET(CMAKE_C_FLAGS_DEBUG "-g")
SET(CMAKE_C_FLAGS_PROFILE "-g -ffast-math -pg")

TARGET_LINK_LIBRARIES(interface m ${LIBS})



# installation --------------------------------------------

INSTALL(TARGETS interface DESTINATION bin)

Cela s'ajoute la -static pour le compilateur, lorsque j'utilise -DCMAKE_BUILD_TYPE=cluster. Le truc c'est qu'il relie encore à l'encontre de la .so versions des libs, ce qui provoque la gcc de générer des erreurs. Au moins la FindLibConfig.cmake scripts définit à la fois un LIBCONFIG_LIBRARY et un LIBCONFIG_STATIC_LIBRARY variable, que je pourrais utiliser.

Ce qui est le plus élégant, ou de manière intelligente pour atteindre mon objectif?

InformationsquelleAutor janoliver | 2013-03-20