在cmake中编译时间体系结构检测

时间:2011-02-10 22:16:36

标签: build-process cmake cpu-architecture

所以我有一个我正在研究的库,它已经或将要对cpu的每个架构进行优化组装。我们正在谈论优化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是一个小程序,带有一些内联汇编来调用cpuid指令。它从所述指令的整数结果中推导出架构字符串,并将其写入stdout。

现在,上面的工作,我可以直接在头文件中使用该输出,或者我假设构造文件名,这是主意。

然而,我是cmake的新手,我觉得这有点像黑客。也许不是,所以我的问题是我在这里使用cmake正确的方法吗?我是否在任何地方遇到无法预料的问题?

1 个答案:

答案 0 :(得分:1)

您可能最好使用try_run,它将为您编译和运行代码。请注意,在交叉编译时会引入问题,除非您乐于回退到通用x86代码(或强制构建代码的人手动设置缓存变量)。这样您就可以将子体系结构的名称存储在CMake变量中,然后可以将其替换为configure_file之类的标题。