4

我有一个简单的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8.9) project (sample)

add_library(Shared SHARED foo.c)
set_target_properties(Shared PROPERTIES library_output_name libdemo.so.1.2.3)

我希望我的图书馆被调用libdemo.so.1.2.3,但它正在被调用libShared.so。我怎样才能得到这个文件来命名我想要的库?因为我想添加同一个库的静态版本,所以我不只是想更改add_library()指令,因为静态库将具有相同的名称,只是扩展名不同。

4

2 回答 2

3

将行更改set_target_properties()为:

set_target_properties(共享属性库_OUTPUT_NAME demo.so.1.2.3)

解决问题。

前一种方法不会产生错误,但它会默默地忽略该行。

于 2012-09-18T19:05:49.657 回答
0

LIBRARY_OUTPUT_NAME为共享库设置

OUTPUT_NAME为静态库设置

ShivaVG的示例代码

# create object
add_library(ShivaVG_objlib OBJECT
  ${libShivaVG_SOURCES})
set_property(TARGET ShivaVG_objlib
  PROPERTY POSITION_INDEPENDENT_CODE 1)

# create library (static)
add_library(ShivaVGStatic
  STATIC $<TARGET_OBJECTS:ShivaVG_objlib>)
set_target_properties(ShivaVGStatic
  PROPERTIES OUTPUT_NAME ShivaVG)

# create library (shared)
add_library(ShivaVGShared
  SHARED $<TARGET_OBJECTS:ShivaVG_objlib>)
target_link_libraries(ShivaVGShared
  ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} -lm)
set_target_properties(ShivaVGShared
  PROPERTIES LIBRARY_OUTPUT_NAME ShivaVG)

这将产生ShivaVG.soShivaVG.a

于 2021-10-18T07:20:08.407 回答