我有一个包含库列表的文件夹:
libs\libA-1.0
\libB-1.2
\libB-1.4
\libB-1.6
我正在使用例如
在我的cmake脚本中加载这些库FIND_PACKAGE(libB CONFIG)
在这种情况下,CMAKE只是加载libs文件夹中存在的第一个可接受的版本(在本例中为libB-1.2,因为它是文件夹中的第一个)
我知道我可以使用
请求特定的库版本FIND_PACKAGE(libB 1.6 CONFIG)
但是我希望使用最大版本号(或至少是最新的词典顺序)来恢复库,而不指定它(这样我就可以在不修改所有cmake的情况下更新库脚本)。
这可能吗?
答案 0 :(得分:1)
当多个包配置文件可用时,其版本文件声称与所请求的版本兼容,则未指定选择哪一个。不会尝试选择最高或最接近的版本号。
事实上,如果您认为版本号没有标准,那么猜测什么是最高或最接近的"版。明确地给出你在问题中写的确切想要的版本是你能做的最好的。
如果您真的需要它,则必须fork cmake并提出该功能。类似的东西:
FIND_PACKAGE(libB latest CONFIG)
这将需要替代版本文件来比较版本号。类似libB-config-version-compare.cmake
的内容包含:
# given two variables to be compared:
# PACKAGE_FIRST_VERSION and PACKAGE_SECOND_VERSION
SET(PACKAGE_LATEST_VERSION ...)
答案 1 :(得分:1)
自CMAKE 3.7.0 this is now possible
以来控制find_package检查兼容性使用的顺序 两个变量CMAKE_FIND_PACKAGE_SORT_ORDER和 CMAKE_FIND_PACKAGE_SORT_DIRECTION。 例如,为了选择最高版本,可以设置:
exports.saveMedia = ((req, res) => {
const storage = multer.diskStorage({
destination: (req, file, callback) => {
callback(null, (config.const.path.base + config.const.path.productReviewMedia));
},
filename: (req, file, callback) => {
callback(null, Date.now() + '-' + file.originalname);
}
});
const upload = multer({storage: storage}).any('file');
upload(req, res, (err) => {
if (err) {
return res.status(400).send({
message: helper.getErrorMessage(err)
});
}
let results = req.files.map((file) => {
return {
mediaName: file.filename,
origMediaName: file.originalname,
mediaSource: 'http://' + req.headers.host + config.const.path.productReviewMedia + file.filename
}
});
res.status(200).json(results);
});
});