首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以让FIND_LIBRARY在我的*自定义*依赖关系构建之后运行吗?

我可以让FIND_LIBRARY在我的*自定义*依赖关系构建之后运行吗?
EN

Stack Overflow用户
提问于 2013-12-06 00:29:30
回答 1查看 949关注 0票数 1

[注意:这几乎是链接到尚未用CMake构建的库的重复,但在这种情况下,未构建的库来自ADD_CUSTOM_TARGET而不是ADD_LIBRARY,因此CMake无法有效地发挥其通常的魔力。]

我的一个CMake 2.8项目目前有以下代码:

代码语言:javascript
复制
# the COMMAND was heavily simplified but you get the idea
ADD_CUSTOM_TARGET(custom_breakpad_target ALL
    COMMAND cd ${CMAKE_SOURCE_DIR}/google-breakpad && make
)

# now here we are in the root "CMakeLists.txt"
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/google-breakpad/src/client/linux)
ADD_EXECUTABLE(hello)
# ...many lines of code...
ADD_DEPENDENCIES(hello custom_breakpad_target)
TARGET_LINK_LIBRARIES(hello breakpad)

我知道LINK_DIRECTORIES因为其怪异的位置而遭到了反对(或者至少是不屑一顾)(它必须位于ADD_EXECUTABLE之前,尽管我们真的很想把它放在TARGET_LINK_LIBRARIES旁边)。此外,还有一个漂亮的新命令FIND_LIBRARY。所以我想写根"CMakeLists.txt“,更像这样:

代码语言:javascript
复制
ADD_EXECUTABLE(hello)
# ...many lines of code...
ADD_DEPENDENCIES(hello custom_breakpad_target)
FIND_LIBRARY(breakpad breakpad ${CMAKE_SOURCE_DIR}/google-breakpad/src/client/linux)
TARGET_LINK_LIBRARIES(hello breakpad)

这个密码很好..。直到我“打扫干净”。下一次重建无法找到breakpad,因为到FIND_LIBRARY运行时,它已经被rm编辑,而且还没有再次创建。

我怎么才能把这事做好?还是做一些比我的更优雅的工作?

到目前为止,我得到的最好的是

代码语言:javascript
复制
ADD_EXECUTABLE(hello)
# ...many lines of code...
ADD_DEPENDENCIES(hello custom_breakpad_target)
TARGET_LINK_LIBRARIES(hello ${CMAKE_SOURCE_DIR}/google-breakpad/src/client/linux/libbreakpad_client.a)

这具有美学上的缺点,即必须显式写出“libxx.a”文件名,而据我所知,即使我们切换到"libxxx.1.so“,FIND_LIBRARY也会毫无怨言地继续工作。

EN

回答 1

Stack Overflow用户

发布于 2013-12-06 09:14:53

通过自定义命令构建外部目标是非常困难的。CMake提供了ExternalProject模块来协助这方面的工作。

有了这个模块,外部库就可以在CMake配置时构建--即第一次运行cmake时,而不是在运行make来构建实际项目时。这有一个优点,即在配置项目时,所有的文件都已经就位,所以使用find脚本或CMake配置文件很容易找到它们。

当然,只有当外部库不经常更改时,这种方法才有意义,因为重新构建库需要再次运行CMake。如果您需要通过只运行make来重新编译外部库,那么使其工作的最好方法仍然是为它编写一个完整的CMakeLists.txt并使用add_subdirectory

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20413694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档