首页 > 解决方案 > add_executable 创建两个二进制文件而不是一个

问题描述

protoc.cmake:

set(protoc_files
  ${protobuf_source_dir}/src/google/protobuf/compiler/main.cc
)

add_executable(protoc ${protoc_files})
target_link_libraries(protoc libprotobuf libprotoc)
add_executable(protobuf::protoc ALIAS protoc)

set(PROTOC_NAME "protoc")

set_target_properties(protoc PROPERTIES
        VERSION ${protobuf_VERSION}
        OUTPUT_NAME ${PROTOC_NAME})

if(WIN32)
    set(PROTOC_SUFFIX ".exe")
    set_target_properties(protoc PROPERTIES
            SUFFIX ${PROTOC_SUFFIX})
else()
    set(PROTOC_SUFFIX)
endif()

set(PROTOBUF_PROTOC_EXECUTABLE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROTOC_NAME}${PROTOC_SUFFIX}" PARENT_SCOPE)

我已经在我的项目中包含了谷歌协议缓冲区编译器的源代码,并且我使用以前的 cmake 文件来生成运行时二进制文件,但是我得到了两个可执行文件而不是一个文件:“protoc”和“protoc-3.6.1”。

我在 Ubuntu 18.04 上使用 CLion IDE 2018.1.5 和捆绑的 CMake 3.10.3。

在 Windows 上我没有这样的问题。

标签: cmake

解决方案


正如@Tsyvarev 在评论中所说,其中一个文件实际上是另一个文件的符号链接。这就是VERSION属性的含义。


推荐阅读