Если я правильно понимаю, вы хотите рассчитать экспоненциальный компонент для степеней двух для заданных размеров:
32, 64, 128, 256, 512
Это степени двойки с соответствующими показателями :
5, 6, 7, 8, 9
, который мы можем рассчитать.
К сожалению, функция CMake math()
не поддерживает экспоненциальную арифметику c. Но, к счастью, двумя степенями легко манипулировать, используя bit-shift , который поддерживается в CMake. Мы можем создать простую функцию CMake для вычисления (степени 2) показателей, используемых для получения размеров 32, 64, 128, etc
.
function(calc_power_of_two_exponent num exponent)
set(counter 0)
# Shift until our number equals 1.
while(num GREATER 1)
# Right shift by 1
math(EXPR num "${num} >> 1")
# Count the number of times we shift.
math(EXPR counter "${counter} + 1")
endwhile()
# Return the number of times shifted, which is the exponent.
set(exponent ${counter} PARENT_SCOPE)
endfunction()
Похоже, вы хотите перебирать значения этих размеров и показателей в парах. Мы можем установить список размеров для итерации и вычислить соответствующий показатель степени, как мы go.
set(sizes 32 64 128 256 512)
# Iterate through each size.
foreach(size ${sizes})
# Call the function to calculate its base-2 power (or index).
calc_power_of_two_exponent(${size} exponent)
message(STATUS "${size} ${exponent}")
FUNCTION_EXE(${size} ${exponent})
endforeach(size)
Статус message
может использоваться для подтверждения того, что мы передаем правильные значения для функции FUNCTION_EXE
. Этот код печатает:
32 5
64 6
128 7
256 8
512 9