2012-06-18 162 views
1

我想爲我的cmake項目運行自動優化標誌基準。 項目正在交叉編譯,基本c/cxx標誌在工具鏈文件中設置,可分配-DCMAKE_TOOLCHAIN_FILE=<...>Cmake更改編譯標誌

我想在基準測試期間更改c/cxx標誌,但我不想在每個基準測試迭代中更改工具鏈文件。我只是想將一些從工具鏈設置的標誌更改爲其他值(例如,-mtune=cortex-a8-mtune=cortex-a9)。我認爲最好的方法是使用-DMY_TUNE_FLAG=<..>

但我怎麼能改變以前設置的標誌? (不要將標誌附加到c/cxx標誌)。

回答

2

我自己找到了解決方案。哪裏有用string功能。 例如,我可以使用變量BENCH_ARCH來更改ARM arch。 我在所有默認的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=<...> ...啓用默認工具鏈設置。希望這不僅對我有幫助。