【发布时间】: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 上,它目前只构建静态库。
【问题讨论】:
-
这个 sn-p 对我来说看起来不错。如果你这样做
make help,你看到它列出了吗? -
是的,我认为您提供的 CMake 代码没有任何问题。提供完整的
make输出可能会有所帮助? -
@StephenNewell 感谢您的建议。我在本地没有 Linux 工具链,所以我必须询问 Jenkins 构建以找出答案。
-
嗯,您的
make日志根本没有显示正在构建的SimulatorLibCMake 目标(或SimulatorLib_SHARED)。至少,不是从我所看到的。你确定你的 CMake sn-p 中的代码已经到达了吗? -
RUN make IliadLib_test- 您(或您的脚本)使用特定目标调用make。所以make只构建这个目标及其依赖项。
标签: cmake cross-platform shared-objects