【发布时间】:2015-04-21 13:08:55
【问题描述】:
我正在做一个主项目,有几个第三方库。为了清楚起见,我的目标是将所有这些作为导入目标导入,但我无法让一个工作。它基本上是一组静态库 (.lib / lib.a) 及其头文件。
为了便于讨论,Main是主要目标,Third是导入的第三方。
我设法在 Windows 上生成了适当的 Visual Studio 解决方案,但在 Linux 上却没有按预期工作。在构建解决方案时,我最终遇到了这个错误:
"No rule to make target 'Third-NOTFOUND', needed by '../Bin/Main'"
这是我的 CMakeLists.txt 中的一些代码 sn-ps。
Main 的 CMakeLists.txt:
project(Main)
[...]
add_subdirectory(ThirdParty/Third)
set_property(TARGET Third PROPERTY FOLDER "thirdparty")
[...]
add_executable(Main ${SOURCES})
target_link_libraries(Main PRIVATE Third)
Third 的 CMakeLists.txt:
project(Third)
[...]
# Helper function
function(append_lib target lib_debug_dir lib_release_dir name)
set_property(TARGET ${target} APPEND PROPERTY IMPORTED_LOCATION_DEBUG "${lib_debug_dir}/${LIB_NAME}")
set_property(TARGET ${target} APPEND PROPERTY IMPORTED_LOCATION_RELEASE "${lib_release_dir}/${LIB_NAME}")
endfunction()
[...]
add_library(Third STATIC IMPORTED GLOBAL)
set_property(TARGET Third APPEND PROPERTY PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${INCLUDE_DIR}")
append_lib(Third ${LIB_DIR_DEBUG} ${LIB_DIR_RELEASE} libMyLib1.a)
注意:Linux 和 Windows 的代码是相同的,只是它自己的静态库的名称(MyLib1.lib 替换 libMyLib1.a)
我做错了什么?谢谢:)
【问题讨论】:
-
是路径问题吗?此答案是否适用于您:stackoverflow.com/questions/14077611/…
-
我不这么认为。我刚刚又检查了一遍,这些都是正确的绝对路径。
-
如果你检查生成的 Makefile,你看到里面的绝对路径了吗?
-
实际上你让我朝着正确的方向前进 :) 生成的 Makefile 中确实缺少这些库。我尝试设置 IMPORTED_LOCATION 而不是 IMPORTED_LOCATION_
并解决了问题。我现在正在寻找一种方法来为调试和发布配置指定不同的库(例如在 Windows 上)。
标签: cmake