[英]cmake error Cannot find source file when file is generated by EXEC_PROGRAM
我想在沒有安裝的情況下在我的項目中使用 protobuf,所以我復制了其他人的庫和頭文件,並創建了一個 FindProtobuf.cmake,其中包含名為 protobuf_generate_cpp 的函數,它按照我的預期生成源代碼文件,但是 add_library 找不到這些文件,這個是錯誤:
Cannot find source file:
build/basic_types.pb.h
Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
.hpp .hxx .in .txx
我在 ubuntu 18.04.1 中使用 cmake 3.13.4
這些文件完全在構建目錄中生成,它們可以通過
message(STATUS "header file: " ${PROTO_HDRS})
這是 protobuf_generate_cpp 的功能:
function(protobuf_generate_cpp PROTO_SRCS PROTO_HDRS)
set(SRCS_)
set(HDRS_)
math(EXPR idx_max "${ARGC}-1")
foreach(idx RANGE 2 ${idx_max})
set(FILE_PATH ${ARGV${idx}})
if(NOT EXISTS ${FILE_PATH})
set(FILE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${FILE_PATH}")
if(NOT EXISTS ${FILE_PATH})
message(FATAL_ERROR "File ${FILE_PATH} is not exists!")
endif()
endif()
get_filename_component(FILE_NAME ${FILE_PATH} NAME_WE)
get_filename_component(ABSOLUTE_FILE_NAME ${FILE_PATH} ABSOLUTE)
get_filename_component(FILE_PATH ${FILE_PATH} PATH)
EXEC_PROGRAM("protoc --proto_path ${FILE_PATH} --cpp_out ${CMAKE_BINARY_DIR} ${ABSOLUTE_FILE_NAME}")
list(APPEND SRCS_ "${CMAKE_BINARY_DIR}/${FILE_NAME}.pb.cc ")
list(APPEND HDRS_ "${CMAKE_BINARY_DIR}/${FILE_NAME}.pb.h ")
endforeach()
set(PROTO_SRCS ${SRCS_} PARENT_SCOPE)
set(PROTO_HDRS ${HDRS_} PARENT_SCOPE)
endfunction(protobuf_generate_cpp)
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS
basic_types.proto
calibration_parameters.proto
)
add_library(proto STATIC
${PROTO_HDRS}
${PROTO_SRCS}
)
add_library(proto STATIC
${PROTO_HDRS}
${PROTO_SRCS}
)
只能包含源文件。
你可以試試下面的這段代碼,
add_library(proto STATIC
${PROTO_SRCS}
)
target_include_directory(proto 【header's dir】)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.