Makefile 編譯動態鏈接庫

以基於tensorflow模型的命名實體爲例:

項目ner_cpp路徑下有多個文件夾,./inlude   ./src  ./test  等等

如果想要把./src路徑下的所有文件生成一個 xxx.so 或xxx.a的鏈接庫,那麼在src的目錄下編寫一個CMakeLists.txt文件

aux_source_directory(. DIR_SRCS)
# 生成鏈接庫
add_library(NER SHARED ${DIR_SRCS})

 上面的爲動態鏈接庫,最終生成libNER.so

  aux_source_directory(. DIR_SRCS) 將當前目錄(src文件夾下)所有源文件的文件名賦值給變量 DIR_SRCS 

 CMakeLists.txt中的add_library(NER SHARED ${DIR_SRCS})該指令是將DIR_SRCS 中的源文件生成鏈接文件,然後添加到工程中去。其中,NER表示庫文件的名字,最終生成libNER.so

那麼靜態鏈接如下,生成libNER.a

aux_source_directory(. DIR_SRCS)
# 生成鏈接庫
add_library (NER ${DIR_SRCS})

 

項目ner_cpp下的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.8)
project(sample)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")

link_directories(
  /home/tensorflow-r1.14/bazel-bin/tensorflow
  /usr/local/lib
  /usr/local/lib64
  /home/ner_cpp
)

include_directories(
  /usr/local/include
  /home/tensorflow-r1.14
  /home/tensorflow-r1.14/bazel-genfiles
  /home/tensorflow-r1.14/bazel-tensorflow-r1.14/external/protobuf_archive/src
  /home/tensorflow-r1.14/bazel-tensorflow-r1.14/external/eigen_archive
  /home/tensorflow-r1.14/bazel-tensorflow-r1.14/external/com_google_absl
  ./include
)

aux_source_directory(./test/ source_list)
add_subdirectory(./src/)
add_executable(main ${source_list})

target_link_libraries(main
  tensorflow_cc
  tensorflow_framework
  ner
)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章