覆盖find_package的defautl搜索顺序

时间:2019-01-31 10:59:37

标签: c++ cmake

我试图避免的cmake find_package使用FindJPEG.cmake从系统中,我创建了FindJPEG.cmake的副本,并改变了一点,把它付诸表决的消息(状态“...”)作为能够者区分它,是这样的:

...
message(STATUS "MY CUSTOM JPEG FIND SCRIPT")
if(NOT JPEG_LIBRARY)
  message(STATUS "MY CUSTOM JPEG FIND SCRIPT >> FIRST TIME FIND LIBRARY")
  find_library(JPEG_LIBRARY_RELEASE NAMES ${jpeg_names})
...

然后我复制这个变化的scritp到/我的/定制/模块/路径,然后我开始我cmake的配置与:

cmake .. -DCMAKE_MODULE_PATH=/my/custom/module/path;${CMAKE_MODULE_PATH}

如果在我的CMakeLists.txt我只能调用find_package(JPEG)一切正常(显示自定义消息) 但后来我加入我的CMakeLists.txt碧玉的依赖,这也取决于JPEG。因此,我只需要执行一次find_package(Jasper),JPEG依赖项将由jasper加载。

随着最后一个问题是,我FindJPEG.cmake改变脚本现在不叫,我以为这是因为在当前目录下的CMAKE_MODULE_PATH搜索顺序先开始...不要按照顺序由我指定的CMake命令行。

我们可以改变这种行为吗?或者,如果我在解释这种错误,那么有人可以更好地解释为什么会这样吗?

谢谢 努诺

2 个答案:

答案 0 :(得分:2)

如果要使用自己的自定义模块路径进行运输,请使用:

SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake)

在项目开始时,这是通常的模式,使用CMake文件夹cmake存放新FindJPEG.cmake文件。

然后,您可能还希望查看一些变量,例如CMAKE_LIBRARY_PATH,这些变量可能足以更改搜索路径而无需重写新的<!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <body> <div ng-app="App"> <select ng-controller="UserSelection as User" ng-model="User.UserSelected" ng-change="User.onSelectChange()" ng-init="User.UserSelected='--select--'"> <option value="--select--">--select--</option> <option value="SAP_Executive">SAP Executive</option> <option value="Fiber_Engineer">Fiber Engineer</option> <option value="Fiber_Lead">Fiber Lead</option> <option value="CMM">CMM</option> </select> </div> <script> angular.module('App', []) .controller('UserSelection', function () { var User = this; User.onSelectChange = function () { alert('change value selected'); }; }); </script> </body> </html>

答案 1 :(得分:0)

;因此您必须使用引号转义-DCMAKE_MODULE_PATH =“ .....”