【发布时间】:2018-04-17 22:48:30
【问题描述】:
我有一个具有以下文件夹结构的项目
/
|- build
|- MyLib1
| |- source
| | |- lib1_s1.cpp
| | |- lib2_s2.cpp
| |- include
| | |- lib1_s1.hpp
| | |- lib2_s2.hpp
| |- CMakeLists.txt
|- app
| |- source
| | |- app_s1.cpp
| | |- app_s2.cpp
| |- include
| | |- app_s1.hpp
| | |- app_s2.hpp
| |- CMakeLists.txt
|
|- CMakeLists.txt
我的应用程序依赖于 MyLib1(编译为静态库)。 lib1/CMakeLists.txt如下:
add_library(MyLib1 STATIC ${LIB_SRC})
install(TARGETS MyLib1 DESTINATION ${CMAKE_SOURCE_DIR}/bin)
而我的app/CMakeLists.txt如下:
add_executable(app ${APP_SRC}/main.cpp)
target_link_libraries(app ${CMAKE_SOURCE_DIR}/bin/libMyLib1.a )
install(TARGETS app DESTINATION ${CMAKE_SOURCE_DIR}/bin)
在我的构建文件夹中,我调用了 cmake,它成功构建了 MyLib1,但没有安装它。产生的错误是:
make[2]: *** No rule to make target `../bin/libMyLib1.a', needed by`/app'. Stop.
我的 Cmake 版本是:
cmake version 3.11.0-rc3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
我已经看到了一些关于堆栈溢出的答案,其中最相关的是this。但是,建议的解决方案似乎并没有解决我的问题。
我可以采取哪些不同的方式来解决问题?
【问题讨论】:
-
如果你只是将
target_link_libraries(app MyLib1 )放在app的链接中而不是使用你的库的相对位置会发生什么?请注意,直接使用 lib 的名称将使此构建不可移植,这是 CMake 的优势之一。 -
@Henrique,这行得通!我还发现了相同的建议here。见评论1。
-
酷。我会提交作为答案。
标签: cmake