Итак, у меня есть библиотека, над которой я работаю, которая имеет или будет иметь оптимизированную сборку для каждой архитектуры процессора. Мы говорим об оптимизации для Nehalem, или core2, или k8, или чего-то еще.
В любом случае, я недавно экспериментировал с системами сборки и мне удалось настроить следующее с CMake:
add_executable(arch/cpuid_x86 arch/cpuid_x86.c)
execute_process(COMMAND ${PROJECT_BINARY_DIR}/arch/cpuid_x86
OUTPUT_VARIABLE PROJECT_CPUID OUTPUT_STRIP_TRAILING_WHITESPACE)
Это делает то, что вы думаете, что делает. cpuid_x86.c
- небольшая программа на c с некоторой встроенной сборкой для вызова инструкции cpuid
. Он выводит строку архитектуры из целочисленного результата указанной инструкции и записывает ее в стандартный вывод.
Теперь вышеприведенное работает, я могу затем использовать этот вывод непосредственно в заголовочном файле, или я предполагаю для создания имен файлов, что является идеей.
Тем не менее, я новичок в cmake, и я просто чувствую, что это что-то вроде хака. Возможно, это не так, поэтому мой вопрос в том, правильно ли я использую cmake? Я сталкиваюсь с непредвиденными проблемами где-нибудь?