【问题标题】:CMake building multiple libraries in the same projectCMake 在同一个项目中构建多个库
【发布时间】:2020-05-26 12:37:04
【问题描述】:

我有一个特定的 CMake 项目,我想将其构建为静态库和共享对象(仅限 Linux)。 CMake文件的相关部分:

...

# Static lib
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})

# Build shared object in Linux only
if(UNIX)
    set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
    add_library("${PROJECT_NAME}_SHARED" SHARED ${SOURCES} ${HEADERS})
endif(UNIX)

link_directories(${ILI_EXTERNAL_LIB_DIRS})

target_link_libraries(${PROJECT_NAME} ${ILI_EXTERNAL_LIBS} IliLib PlantModel)

我可以弄清楚为什么没有构建共享对象,当我在 Unix 块中添加一条消息时,它会在 make 构建期间打印出来。此 cmake 文件的其余部分仅设置变量并声明项目名称。

关于如何调试此问题的任何提示?在 Windows 和 Linux 上,它目前只构建静态库。


编辑: Link to CMake and Make log outputs.

【问题讨论】:

  • 这个 sn-p 对我来说看起来不错。如果你这样做make help,你看到它列出了吗?
  • 是的,我认为您提供的 CMake 代码没有任何问题。提供完整的make 输出可能会有所帮助?
  • @StephenNewell 感谢您的建议。我在本地没有 Linux 工具链,所以我必须询问 Jenkins 构建以找出答案。
  • 嗯,您的make 日志根本没有显示正在构建的SimulatorLib CMake 目标(或SimulatorLib_SHARED)。至少,不是从我所看到的。你确定你的 CMake sn-p 中的代码已经到达了吗?
  • RUN make IliadLib_test - 您(或您的脚本)使用特定目标调用make。所以make 只构建这个目标及其依赖项。

标签: cmake cross-platform shared-objects


【解决方案1】:

@Tsyvarev 提出了解决方案,这是我的一个小错误。

正在构建静态库,因为它是另一个构建目标的依赖项。我没有在 SimulatorLib 项目上明确运行“Make”。

无论该特定项目是否正在构建,CMake 消息都会出现在 CMake 日志中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2018-02-19
    • 2018-11-26
    相关资源
    最近更新 更多