4 votes

Cmake change les drapeaux de compilation

Je veux lancer un benchmark automatique des drapeaux d'optimisation pour mon projet cmake. Le projet est en compilation croisée, les drapeaux c/cxx de base sont définis dans le fichier toolchain assignable par -DCMAKE_TOOLCHAIN_FILE=<...> .

Je veux changer les drapeaux c/cxx pendant le benchmarking, mais je ne veux pas changer le fichier toolchain à chaque itération du benchmarking. Je veux juste changer certains drapeaux de la toolchain à une autre valeur (par exemple, -mtune=cortex-a8 a -mtune=cortex-a9 ). Je pense que le meilleur moyen est d'utiliser -DMY_TUNE_FLAG=<..> .

Mais comment puis-je changer le drapeau précédemment défini ? (pas ajouter le drapeau aux drapeaux c/cxx).

4voto

exbluesbreaker Points 1803

J'ai trouvé la solution par moi-même. Où est l'utilité string fonction. Par exemple, je peux utiliser la variable BENCH_ARCH pour changer l'architecture ARM. J'ai écrit dans le fichier toolchain après la définition de tous les drapeaux C/C++ par défaut. D'abord, ajouter une variable pour la mise en cache :

...
set(BENCH_ARCH "${BENCH_ARCH}" CACHE STRING "Arch" FORCE)`
...

Après cela, vérifiez que la variable est définie et remplacez la variable flags

if(BENCH_ARCH)
    string(REGEX REPLACE "-march=[A-Za-z_0-9/-]*" "-march=${BENCH_ARCH}"          <variable, which set flags> ${<variable, which set flags>})
endif()
...

Par exemple :

string(REGEX REPLACE "-march=[A-Za-z_0-9/-]*" "-march=${BENCH_ARCH}" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})

Maintenant, je peux utiliser cmake -DBENCH_ARCH=armv5te -DCMAKE_TOOLCHAIN_FILE=<...> ... pour permettre -march=armv5te et utiliser cmake -DCMAKE_TOOLCHAIN_FILE=<...> ... pour activer le paramètre par défaut de la chaîne d'outils. J'espère que cela ne sera pas seulement utile pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X