【问题标题】:Cmake config file when optional libraries are built构建可选库时的 Cmake 配置文件
【发布时间】:2017-09-26 13:38:38
【问题描述】:

我有一个项目,如果用户愿意,您可以或不可以为该项目构建 GUI。这是一个可选的库。

我正在尝试创建一个用于安装的 Cmake 配置文件,但我不知道是否有任何聪明的方法可以知道这一点并为它调整文件。现在我有:

set(MYPROG_INCLUDE_DIRS @CMAKE_INSTALL_PREFIX@/include/myprog)

foreach(lib feature geometry gui sensors sensorstream utils)
    list(APPEND MYPROG_LIBRARIES @CMAKE_INSTALL_PREFIX@/lib/libmyprog_${lib}.so)
endforeach()

但是在我构建 gui 的那一刻,这个文件也给了MYPROG_LIBRARY 指向 gui 的链接,即使它不是构建的。我考虑过将两者分开:

set(MYPROG_INCLUDE_DIRS @CMAKE_INSTALL_PREFIX@/include/myprog)

foreach(lib feature geometry sensors sensorstream utils)
    list(APPEND MYPROG_LIBRARIES @CMAKE_INSTALL_PREFIX@/lib/libmyprog_${lib}.so)
 endforeach()

set(MYPROG_LIBRARIES_GUI CMAKE_INSTALL_PREFIX@/lib/libmyprog_gui.so)

但如果我构建了 gui,我现在必须执行不同的调用来获取所有库。

在我的 Cmake 中,如果我无法构建 GUI,我将 BUILD_GUI 设置为 0。有什么方法可以使用吗?

【问题讨论】:

    标签: cmake config configuration-files


    【解决方案1】:

    您可以建立您的组件列表,然后将其放入配置文件:

    set(COMPONENTS lib feature geometry sensors sensorstream utils)
    if(BUILD_GUI)
      list(APPEND COMPONENTS gui)
    endif()
    

    在配置文件中

    foreach(lib @COMPONENTS@)
        list(APPEND MYPROG_LIBRARIES @CMAKE_INSTALL_PREFIX@/lib/libmyprog_${lib}.so)
    endforeach()
    

    【讨论】:

    • 应该是foreach(lib @COMPONENTS@)吧?
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多