我正在使用命令行构建DCMTK,使用以下命令:
ClaimValueTypes
我想将BUILD_APPS设置从命令行移动到顶级CMakeLists.txt配置文件中。无论我如何尝试在顶级配置文件中设置BUILD_APPS选项,我都不会得到正确的行为,除非我从命令行显式设置了BUILD_APPS选项。
有没有办法从顶级CMakeLists.txt文件中显式设置命令行选项?
我从DCMTK来源和借阅中借用了这个。它不起作用:
public static class ClaimExtensions
{
public static object ValueAsValueType(this Claim claim)
{
switch (claim.ValueType)
{
case ClaimValueTypes.Double:
return double.Parse(claim.Value);
case ClaimValueTypes.String:
return claim.Value;
default:
throw new Exception(string.Format("Unhandled ClaimValueType {0} in ClaimExtensions.ValueAsValueType()", claim.ValueType));
}
}
public static List<Claim> ToClaims(this Dictionary<string, object> payload)
{
return payload.Select(x =>
{
string valueType;
var value = x.Value;
if (x.Value is double || x.Value is decimal)
valueType = ClaimValueTypes.Double;
else if (x.Value is string)
valueType = ClaimValueTypes.String;
else
throw new Exception(string.Format("Unhandled type of Claim Value {0} in ClaimExtensions.ToClaims()", value.GetType()));
return new Claim(x.Key, x.Value.ToString(), valueType);
}).ToList();
}
}
当我查看上面的SET命令生成的CMakeCache.txt文件时,我看到正确设置了选项:
cmake -DBUILD_APPS=BOOL:OFF ../latest_dcmtk
不幸的是,该选项不起作用。
答案 0 :(得分:0)
一般来说,使用CMake时必须记住两件事:
所以我同意@Tsyvarev和@ usr1234567,这很可能是一个订购问题:
set(BUILD_APPS OFF CACHE BOOL "" FORCE)
if (BUILD_APPS)
set(BUILD_APPS ...)
中隐藏缓存变量CMakeLists.txt
CMakeCache.txt
文件中的任何内容只是在代码的所有处理完成后(在主CMakeLists.txt
的末尾)的那些变量的状态我再次尝试,-D
强制执行缓存条目。因此,使用-D
命令行选项和set(... CACHE ... FORCE)
之间应该没有区别。只是你不能组合使用它们(后者总是会覆盖给定选项的任何命令行)。
请尝试在主CMakeLists.txt
的顶部添加variable_watch(BUILD_APPS)
,以找到隐藏/覆盖变量的代码部分。
<强>参考强>