小编Chu*_*nch的帖子

ExternalProject_Add autogen 项目防止在重建时配置

我在 linux 上有一个 CMake 项目,我正在使用它ExternalProject来构建 Google Protobuf。它工作得很好,但是任何后续构建仍然会调用外部项目中的配置步骤(这很烦人,因为 protobuf 是一个具有相当长步骤的 autogen 项目)。我使用了这个UPDATE_DISCONNECTED论点,所以它不会重新克隆这对一些人有帮助,但你会认为如果它不重新克隆,它就不需要重新配置或重新构建/安装。我怎样才能让 CMake 只构建一次并跳过后续构建(即我的下一个make构建目录)?

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11)
project(pbuf_test)

include(${PROJECT_SOURCE_DIR}/cmake/protogen.cmake)

set(PBUF_DIR ${PROJECT_BINARY_DIR}/protobuf)

include(ExternalProject)
ExternalProject_Add(protobuf
    PREFIX ${PROTOBUF_DIR}
    GIT_REPOSITORY https://github.com/google/protobuf.git
    GIT_TAG v3.4.1
    UPDATE_DISCONNECTED 1
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${PBUF_DIR}
)

set(PBUF_INCLUDE_DIR ${PBUF_DIR}/include)
set(PBUF_LIBRARY ${PBUF_DIR}/lib/libprotobuf.so)
set(PBUF_PROTOC ${PBUF_DIR}/bin/protoc)

file(GLOB PBUF_FILES "${PROJECT_SOURCE_DIR}/msg/*.proto")
custom_protobuf_generate_cpp(PBUF_SRCS PBUF_HDRS ${PBUF_FILES})

include_directories(
    ${PROJECT_BINARY_DIR}
    ${PBUF_INCLUDE_DIR}
)

add_executable(${PROJECT_NAME} main.cpp ${PBUF_SRCS} ${PBUF_HDRS})
add_dependencies(${PROJECT_NAME} protobuf)
target_link_libraries(${PROJECT_NAME}
    ${PBUF_LIBRARY}
)   
Run Code Online (Sandbox Code Playgroud)

完整的示例项目在这里

configure cmake autogen

5
推荐指数
1
解决办法
855
查看次数

无回调的Nanopb

我正在使用Nanopb尝试从基于VxWorks的National Compact Compact RIO(9025)发送protobuf消息。我的交叉编译效果很好,甚至可以发送不需要额外编码的数据类型的完整消息。让我着迷的是回调。我的代码是通过LabVIEW交叉编译和调用的,基于Nanopb的基于回调的结构似乎在目标计算机上中断(错误,崩溃,目标重新启动等)。如果我不带任何回调地运行它,则效果很好。

这是有问题的代码:

bool encode_string(pb_ostream_t *stream, const pb_field_t *field, void * const *arg)
{
    char *str = "Woo hoo!";

    if (!pb_encode_tag_for_field(stream, field))
        return false;

    return pb_encode_string(stream, (uint8_t*)str, strlen(str));
}

extern "C" uint16_t getPacket(uint8_t* packet)
{
    uint8_t buffer[256];
    uint16_t packetSize;

    ExampleMsg msg = {};
    pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));

    msg.name.funcs.encode = &encode_string;

    msg.value = 17;
    msg.number = 18;

    pb_encode(&stream, ExampleMsg_fields, &msg);
    packetSize = stream.bytes_written;

    memcpy(packet, buffer, 256);
    return packetSize;
}
Run Code Online (Sandbox Code Playgroud)

这是原始文件:

syntax = "proto2"

message ExampleMsg { …
Run Code Online (Sandbox Code Playgroud)

c labview vxworks protocol-buffers nanopb

0
推荐指数
1
解决办法
4387
查看次数

标签 统计

autogen ×1

c ×1

cmake ×1

configure ×1

labview ×1

nanopb ×1

protocol-buffers ×1

vxworks ×1