CMake不使用CMAKE_CXX_COMPILER作为正确的默认值

时间:2017-06-16 19:09:42

标签: cmake

我们的项目经常是交叉编译的,因此我们希望允许不同的目标C ++编译器,它与在前端节点上运行的编译器不同。 CMakeLists.txt包含以下内容:

OPTION(target_cxx "select target CXX Compiler for building libqphix-codegen.a" ${CMAKE_CXX_COMPILER})
OPTION(target_cxxflags "select target CXXFLAGS for building libqphix-codege.a" ${CMAKE_CXX_FLAGS})

当我用cmake ~/Projekte/qphix-codegen/ -Disa=avx -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS='-O3 -march=sandybridge'调用它时,我希望将target_cxx设置为g++并相应地设置标志。但是,target_cxx的值为OFF

我需要指定-Dtarget_cxx才能获得除OFF之外的其他值。

是否可以采用不同的方式使这些变量获得合理的默认值?我的印象是过早评估默认值。

1 个答案:

答案 0 :(得分:0)

option()仅适用于布尔变量,只是让用户传递一些标志。这里需要的是set()。有两种变体:

set(varname value)

set(varname [default] CACHE STRING helptext)

前者创建一个由所有子目录继承的变量,后者创建一个具有字符串类型的用户可服务变量。