当前目录结构树如下
---Main
|---src
| |---CMakeLists
| |---A.cpp
| |---A.h
|
|---test
| |---CMakeLists
|---test.cpp
|
|---CMakeLists
在 Main 中设置了 add_subdirectory src 和 test;
src 中生成一个 libA.so
;
test 中生成执行文件 test ,链接 libA;
为了在 libA 中添加版本信息,我将各个级的 CMakeLists 改成如下:
Main
add_subdirectory(src)
add_subdirectory(test)
src
add_library(A SHARED A.cpp A.h)
set_target_properties(A PROPERTIES VERSION 1.0 SONAME 1)
target_compile_options(A PRIVATE "-fPIC")
add_custom_command(
TARGET A POST_BUILD
COMMAND
${CMAKE_COMMAND} -E rename ${PROJECT_SOURCE_DIR}/libA.so.1.0 ${PROJECT_SOURCE_DIR}/libA.so
)
test
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=./")
add_executable(test test.cpp)
target_link_libraries(test libA.so)
这样产生的 libA.so , 可以通过 readelf libA.so | grep "SONAME"
看到编译时间,但是也产生了问题。
如果将 test 目录下 CMakeLists 改为 target_link_libraries(test A)
虽然 test 后编译,但是会报错,找不到 libA.so.1.0
想问一下各位朋友有没有啥解决方法,在 1.情况下,可以先编译生成 libA ,再去编译链接 test 或者对于版本,有更好的方法,我是希望编译出 libA.so 而使用别的方式去获取到版本信息
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.