我有一个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)
生成以下包含顺序(它们都是作为系统包含的添加):
bar
/usr/local/include
因此,在构建时,我实际上是为foo_INCLUDE_PATH
的全局安装而不是本地的销售版本提取标题。但我会链接我的本地版本,但两者不匹配,导致运行时错误。
因此,我需要一些方法来确保首先搜索foo
(或者更常见的是,最后搜索foo_INCLUDE_PATH
)。怎么办呢?