我有一个使用CMake在Linux上生成 Makefile的 C 应用程序。该应用程序包含.c
以及.proto文件。现在我需要生成.pb-c.c
并在其中.pb-c.h
使用protoc命令,CMakeLists.txt
以便当我执行cmake .
cmake 时生成相应的 .pb-c 和 .pb-h。协议用作:
execute_process(COMMAND bash -c "${PROTOC_PATH} --c_out=${CMAKE_CURRENT_SOURCE_DIR}/ --proto_path=${PROTO_DIR}/ ${PROTO_DIR}/*.proto")
问题是我的 protoc 二进制文件和相关.so
文件不在/usr/bin and /usr/lib
or中/usr/local/bin and /usr/local/lib
。它们位于项目内的目录中 -$HOME/project-name/dependencies/bin/protoc and $HOME/project-name/dependencies/lib/libprotobuf.so.12
因此,我收到错误 -加载共享库时出错:libprotobuf.so.12:无法打开共享对象文件:没有这样的文件或目录
但是,如果我给出的命令为
execute_process(COMMAND bash -c "protoc--c_out=${CMAKE_CURRENT_SOURCE_DIR}/ --proto_path=${PROTO_DIR}/ ${PROTO_DIR}/*.proto")
然后运行cmake .
它可以正常工作,因为链接器能够从中获取.so
文件/usr/lib
下面提到的是我的 CMakeLists.txt 文件的一部分
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=${PROTOC_LIB_PATH} -L${PROTOC_LIB_PATH} -lprotobuf")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-rpath=${PROTOC_LIB_PATH} -L${PROTOC_LIB_PATH} -lprotobuf")
execute_process(COMMAND bash -c "${PROTOC_PATH} --c_out=${CMAKE_CURRENT_SOURCE_DIR}/ --proto_path=${PROTO_DIR}/ ${PROTO_DIR}/*.proto")
但由于上述错误,它不起作用。
对于那些可能会说这是重复的人,我已经调查并尝试了以下 SO 问题:
cmake 有类似 target_link_options 的东西吗?