15 novembre 2006

CMAKE déterministe ?

Je travaille actuellement sur un ptit projet perso, et pour le build, tant qu'à faire je me suis dit que j'allais utiliser cmake (qui est le système de build officiel de kde4, et de plus je n'ai jamais été grand fan d'autoconf)

Bref j'étais ravis, c'est bien fait et facile à utiliser, de plus il sait générer des Makefile standard (pour gmake et même visual), ou encore des projets kdevelop, et on trouve assez facilement des modules (perso j'ai pris ceux du svn de kde)

Néanmoins une surpise : entre 2 fichiers CMakeLists.txt identiques, j'ai des résultats différents :



ADD_CUSTOM_COMMAND(OUTPUT ${MYINCLUDES}/ui_mainWindow.h
COMMAND ${QT_UIC_EXECUTABLE} ARGS -o ${MYINCLUDES}/ui_mainWindow.h ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow.ui
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow.ui)
INCLUDE_DIRECTORIES (. ${MYINCLUDES})

ADD_LIBRARY(mainWindow STATIC ${MYINCLUDES}/ui_mainWindow.h mainWindow.h mainWindow.cpp)

MV_INCL(mainWindow.h)
MV_LIB(mainWindow)


et


ADD_CUSTOM_COMMAND(OUTPUT ${MYINCLUDES}/ui_dateInterval.h
COMMAND ${QT_UIC_EXECUTABLE} ARGS -o ${MYINCLUDES}/ui_dateInterval.h ${CMAKE_CURRENT_SOURCE_DIR}/dateInterval.ui
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/dateInterval.ui)

INCLUDE_DIRECTORIES (. ${MYINCLUDES})

ADD_LIBRARY(dateIntervalWidget STATIC ${MYINCLUDES}/ui_dateInterval.h dateInterval.h dateInterval.cpp dateIntervalPlugin.cpp)

MV_INCL(dateInterval.h)
MV_LIB(dateIntervalWidget)


MV_INCL et MV_LIB étant des macros persos copiant mes includes et mes libs générées dans un repertoire précis.
Hors la différence entre ces 2 jeux d'instructions, est que dans un cas tout se passe bien, dans l'autre les règles ne s'éxécuteront pas dans le bon ordre, et mieu, se trouveront même dans des Makefile séparés !

Bon la solution simple est d'utiliser dans mes macros la règle ADD_DEPEDENCY, néanmoins je trouve ce comportement curieu

Aucun commentaire: