
当前目录结构树如下
---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 而使用别的方式去获取到版本信息