我们的项目经常是交叉编译的,因此我们希望允许不同的目标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
之外的其他值。
是否可以采用不同的方式使这些变量获得合理的默认值?我的印象是过早评估默认值。
答案 0 :(得分:0)
option()
仅适用于布尔变量,只是让用户传递一些标志。这里需要的是set()
。有两种变体:
set(varname value)
和
set(varname [default] CACHE STRING helptext)
前者创建一个由所有子目录继承的变量,后者创建一个具有字符串类型的用户可服务变量。