以基於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
)