2012-06-18 3 views
1

Я хочу запустить автоматический флажок флажка оптимизации для моего проекта cmake. Проект кросс-компиляции, базовые флаги c/cxx устанавливаются в файле toolchain, назначаемом -DCMAKE_TOOLCHAIN_FILE=<...>.Знаки компиляции изменений Cmake

Я хочу изменить флаги c/cxx во время бенчмаркинга, но я не хочу менять файл toolchain на каждой итерации эталона. Я просто хочу изменить некоторые флаги, установленные из инструментальной цепочки, на другое значение (например, -mtune=cortex-a8 - -mtune=cortex-a9). Я думаю, что лучший способ - использовать -DMY_TUNE_FLAG=<..>.

Но как я могу изменить ранее установленный флаг? (не добавлять флаг к флагам c/cxx).

ответ

2

Я нашел решение самостоятельно. Где полезно string функция. Например, я могу использовать переменную BENCH_ARCH для изменения арки ARM. Я записал в файле toolchain после определения определения по умолчанию для C/C++. Во-первых, добавить переменную для кэширования:

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

После этого проверьте, что переменная установлена ​​и заменить флаги переменных

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

Например:

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

Теперь я могу использовать cmake -DBENCH_ARCH=armv5te -DCMAKE_TOOLCHAIN_FILE=<...> ... для включите -march=armv5te и используйте cmake -DCMAKE_TOOLCHAIN_FILE=<...> ..., чтобы включить настройку инструментальной привязки по умолчанию. Надеюсь, это будет полезно не только для меня.

Смежные вопросы