CMake包含路径的顺序

时间:2017-08-16 17:53:25

标签: cmake

我有一个IMPORTED静态库(比如说foo),我想链接到它。我使用ExternalProject_Add在源代码树中构建它,然后创建一个IMPORTED库目标,我为其设置了相应的属性(INTERFACE_INCLUDE_DIRECTORIES为标题,{{1对于二进制文件。)

我还有一个全局安装的同一个库版本,其标题安装在IMPORTED_LOCATION下。不幸的是,我的构建使用的另一个包(特别是/usr/local/include)也在FindPackage(LibLZMA)中安装了标头。

伪脚本如下所示:

/usr/local/include

现在问题是cmake为FindPackage(libLZMA) add_library(foo STATIC IMPORTED) set_property(TARGET foo PROPERTY IMPORTED_LOCATION ${PROJECT_BINARY_DIR}/lib/libfoo.a) set_property(TARGET foo PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${foo_INCLUDE_DIRS} ${LIBLZMA_INCLUDE_DIRS}) add_executable(bar ${bar_SOURCES} target_link_libraries(bar foo) 生成以下包含顺序(它们都是作为系统包含的添加):

  1. bar
  2. /usr/local/include
  3. 因此,在构建时,我实际上是为foo_INCLUDE_PATH的全局安装而不是本地的销售版本提取标题。但我会链接我的本地版本,但两者不匹配,导致运行时错误。

    因此,我需要一些方法来确保首先搜索foo(或者更常见的是,最后搜索foo_INCLUDE_PATH)。怎么办呢?

0 个答案:

没有答案