Обнаружение архитектуры времени компиляции в cmake - PullRequest
2 голосов
/ 11 февраля 2011

Итак, у меня есть библиотека, над которой я работаю, которая имеет или будет иметь оптимизированную сборку для каждой архитектуры процессора. Мы говорим об оптимизации для 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? Я сталкиваюсь с непредвиденными проблемами где-нибудь?

1 Ответ

1 голос
/ 11 февраля 2011

Возможно, вам лучше использовать try_run, который скомпилирует и запустит код для вас. Имейте в виду, что вы сталкиваетесь с проблемами при кросс-компиляции, если только вы не хотите вернуться к общему коду x86 (или заставить человека, создающего ваш код, вручную устанавливать переменные кэша). Это позволит вам сохранить имя субархитектуры в переменной CMake, которую затем можно заменить на заголовок чем-то вроде configure_file.

...