54Fermer56
Kevin KoflerLe 09/05/2015 à 00:41
Folco (./52) :
Pourrais-je savoir d'où sortent ces variables magiques, QT_INCLUDES, QT_QTCORE_LIBRARY et QT_QTGUI_LIBRARY ?

Du find_package(Qt4). La convention pour les variables définies par find_package est simple: x_y, où x est le nom du package (d'habitude, exactement comme écrit dans find_package y compris la casse, Qt4 est une exception avec ses variables en QT_*, les noms ont été normalisés pour Qt5) et y est souvent un de certains noms courants: INCLUDES, LIBRARY, LIBRARIES, … Si tu veux voir exactement ce qui est défini, le mieux est de regarder directement dans le fichier Find*.cmake ou *Config.cmake.
ps -> la boite de configuration d'un projet permet de régler plein de vars de CMake, ça n'interfère pas avec le CMakeList.txt qu'on écrit à la main ? Si on génère ce fichier soi-même, je ne vois pas bien, du coup, l'intéret de la boite de dialogue. Je rate surement un truc.

CMake permet de définir des variables "cached". Ces variables sont enregistrées d'une exécution de CMake à une autre dans CMakeCache.txt et peuvent être modifiées soit directement dans CMakeCache.txt, soit dans la ligne de commande de CMake. Ce sont ces variables que le dialogue te permet de configurer. Elles sont définies dans le CMakeLists.txt en rajoutant CACHE et le nom du type (STRING, BOOLEAN etc.) à la commande set.
Folco (./54) :
set(CMAKE_POSITION_INDEPENDANT_CODE ON)

Attention, ça s'écrit CMAKE_POSITION_INDEPENDENT_CODE, sinon ça n'aura aucun effet!
Comme on voit, les options de CMake sont définies pour un target et non au niveau global. C'est vraiment comme on veut, ou il vaut mieux que je sache quelque chose maintenant ?

Ben, la valeur globale est la valeur par défaut, utilisée si tu ne spécifies rien pour un target particulier. Si tu spécifies la valeur pour un target, ça prend la préférence. Ça permet par exemple de compiler seulement certains targets en PIC (ceux qui finiront dans une bibliothèque dynamique). Soit dit en passant qu'une bibliothèque dynamique est automatiquement PIC, il n'y a besoin de le préciser que pour des bibliothèques statiques qui sont ensuite linkées dans une bibliothèque dynamique dans une étape successive. Un exécutable n'a normalement pas besoin d'être PIC.