通过add_dependencies强制安装cmake?

时间:2017-04-28 19:29:40

标签: cmake

如果这是重复的话,我很抱歉。我看到很多相似的帖子,但我要么“得到”它还是不完全相同的问题。 我需要构建两个共享库。它们处于相同的目录结构中,它们都可以进入bin。一个依赖于另一个。

我一直在阅读add_dependencies,但这似乎涉及cmake之外的项目构建。这些都在里面

目录结构

src
  CMakeLists.txt
  bin
  xml
    CMakeLists.txt
    XML.c
    utils.c
    XMLSPCL.c

的src /的CMakeLists.txt

set (BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin")
add_subdirectory(xml/shrxml)

xml / CMakeLists.txt(在下面的建议之后)

set(CMAKE_BUILD_TYPE Release)
project(shrxml)
    add_library(shrxml SHARED XML.c utils.c)
    install(TARGETS shrxml LIBRARY DESTINATION ${BIN_DIR})

project(shrxmlSPCL)
    add_dependencies(shrxmlSPCL shrxml)
    add_library(shrxmlSPCL SHARED XMLSPCL.c)
    target_link_libraries(shrxmlSPCL LINK_PUBLIC shrxml)
    install(TARGETS shrxmlSPCL LIBRARY DESTINATION ${BIN_DIR})

我可以让它发挥作用,但我知道必须有一个正确的方法来做到这一点 为了让它发挥作用,我:

comment out the xmlSPCL project
cmake ..
make shrxml
run make install so I can get shrxml.so in to the bin directory
un-comment out xmlSPCL
make (again)
make install (again)

我想要的是运行make一次,让shrxml.so进入bin目录,这样当链接shrxmlSPCL时,它会看到依赖的lib。可以通过额外的步骤完成吗?

1 个答案:

答案 0 :(得分:1)

要制作示例项目,我必须做出3件不同的事情

1。     target_link_libraries(shrxmlSPCL LINK_PUBLIC shrxml)

- >所以 lib .so 都不是前缀/后缀

2。     add_dependencies(shrxmlSPCL shrxml)

- >在具有依赖性

add_library()之下的某处

3。 安装(TARGETS shrxmlSPCL LIBRARY DESTINATION $ {BIN_DIR}) - >将LIBRARY添加到安装命令doc