English 中文(简体)
如何改变CMake的档案,以生产重壳,而不是静态平衡?
原标题:How to change a CMake file to produce a dll instead of static lib?

I am working on a project where I have to use JRTP (Jori Real Time Tranfer Protocol) library. I m using the version 3.9.1 of the library. When I tried to compile that library I used the following CmakeLists.txt file. But It produces some errors like

C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/GenerateExportHeader.cmake:339 (get_property): get_property could not find TARGET jrtplib}.  Perhaps it has not yet been created.
error PRJ0019: A tool returned an error code from "Building Custom Rule C:/projects/jrtplib-3.9.1/CMakeLists.txt"

但是,我希望它能够生产出磨机(动态链接图书馆)。 我在该档案中做了哪些改动? 在建设项目之后,我不得不在视觉演播室做些什么?

cmake_minimum_required(VERSION 2.6)

project(jrtplib)
set(VERSION 3.9.1)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")

set (_DEFAULT_LIBRARY_INSTALL_DIR lib)
if (EXISTS "${CMAKE_INSTALL_PREFIX}/lib32/" AND CMAKE_SIZEOF_VOID_P EQUAL 4)
    set (_DEFAULT_LIBRARY_INSTALL_DIR lib32)
elseif (EXISTS "${CMAKE_INSTALL_PREFIX}/lib64/" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
    set (_DEFAULT_LIBRARY_INSTALL_DIR lib64)
endif ()

set(LIBRARY_INSTALL_DIR "${_DEFAULT_LIBRARY_INSTALL_DIR}" CACHE PATH "Library installation directory")
if(NOT IS_ABSOLUTE "${LIBRARY_INSTALL_DIR}")
    set(LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${LIBRARY_INSTALL_DIR}")
endif()

include(CheckCXXCompilerFlag)
include(CheckIncludeFile)
include(CheckIncludeFileCXX)
include(CheckCXXSourceCompiles)
include(TestBigEndian)
include(${PROJECT_SOURCE_DIR}/cmake/Macros.cmake)


find_package(JThread)

set(JRTPLIB_LINK_LIBS "")
set(JRTPLIB_INTERNAL_INCLUDES "")
set(JRTPLIB_EXTERNAL_INCLUDES "")

add_additional_stuff(JRTPLIB_EXTERNAL_INCLUDES JRTPLIB_LINK_LIBS)
add_library(jrtplib ${MODULE} ${PROJECT_SOURCE_DIR}/include)
GENERATE_EXPORT_HEADER( jrtplib} 
         BASE_NAME jrtplib
         EXPORT_MACRO_NAME jrtplib_EXPORT
         EXPORT_FILE_NAME jrtplib_Export.h
         STATIC_DEFINE jrtplib_BUILT_AS_STATIC
jrtplib_support_option("Support SDES PRIV items" JRTPLIB_SUPPORT_SDESPRIV RTP_SUPPORT_SDESPRIV ON "// No support for SDES PRIV items")
jrtplib_support_option("Support the probation mechanism for a new source" JRTPLIB_SUPPORT_PROBATION RTP_SUPPORT_PROBATION ON "// Do not wait for a number of consecutive packets to validate source")
jrtplib_support_option("Support sending RTCP APP packets" JRTPLIB_SUPPORT_SENDAPP RTP_SUPPORT_SENDAPP ON "// No direct support for sending RTCP APP packets")
jrtplib_support_option("Support sending unknown RTCP packets" JRTPLIB_SUPPORT_RTCPUNKNOWN RTP_SUPPORT_RTCPUNKNOWN OFF "// No support for sending unknown RTCP packets")
jrtplib_support_option("Support memory management mechanism" JRTPLIB_SUPPORT_MEMORYMGMT RTP_SUPPORT_MEMORYMANAGEMENT ON "// No memory management support")

jrtplib_include_test(sys/filio.h RTP_HAVE_SYS_FILIO "// Don t have <sys/filio.h>")
jrtplib_include_test(sys/sockio.h RTP_HAVE_SYS_SOCKIO "// Don t have <sys/sockio.h>")
jrtplib_include_test(ifaddrs.h RTP_SUPPORT_IFADDRS "// No ifaddrs support")

if (JTHREAD_FOUND)
    set(V "ON")
else (JTHREAD_FOUND)
    set(V "OFF")
endif (JTHREAD_FOUND)

option(JTHREAD_ENABLED "Thread support" ${V})
if (JTHREAD_ENABLED)
    set (RTP_SUPPORT_THREAD "#define RTP_SUPPORT_THREAD")
    if (JTHREAD_FOUND)
        save_paths(JRTPLIB_EXTERNAL_INCLUDES "${JTHREAD_INCLUDE_DIRS}")
        save_paths(JRTPLIB_LINK_LIBS "${JTHREAD_LIBRARIES}")
    endif(JTHREAD_FOUND)
else (JTHREAD_ENABLED)
    set (RTP_SUPPORT_THREAD "// No support for JThread was enabled")
endif (JTHREAD_ENABLED)

if (CMAKE_CROSSCOMPILING)
    option (JRTPLIB_USE_BIGENDIAN "Target platform is big endian" ON)
    if (JRTPLIB_USE_BIGENDIAN)
        set(RTP_ENDIAN "#define RTP_BIG_ENDIAN")
    else (JRTPLIB_USE_BIGENDIAN)
        set(RTP_ENDIAN "// Little endian system")
    endif (JRTPLIB_USE_BIGENDIAN)
else (CMAKE_CROSSCOMPILING)
    test_big_endian(JRTPLIB_BIGENDIAN)
    if (JRTPLIB_BIGENDIAN)
        set(RTP_ENDIAN "#define RTP_BIG_ENDIAN")
    else (JRTPLIB_BIGENDIAN)
        set(RTP_ENDIAN "// Little endian system")
    endif (JRTPLIB_BIGENDIAN)
endif (CMAKE_CROSSCOMPILING)

jrtplib_test_feature(socklentest RTP_SOCKLENTYPE_UINT TRUE "// socklen_t is  int ")
jrtplib_test_feature(ipv4mcasttest RTP_SUPPORT_IPV4MULTICAST FALSE "// No IPv4 multicasting support")
jrtplib_test_feature(salentest RTP_HAVE_SOCKADDR_LEN FALSE "// No sa_len member in struct sockaddr")
jrtplib_test_feature(getloginrtest RTP_SUPPORT_GETLOGINR FALSE "// Not using getlogin_r")
jrtplib_test_feature(ipv6test RTP_SUPPORT_IPV6 FALSE "// No IPv6 support")
jrtplib_test_feature(ipv6mcasttest RTP_SUPPORT_IPV6MULTICAST FALSE "// No IPv6 multicasting support")

check_cxx_source_compiles("#include <stdint.h>
#include <sys/types.h>
int main(void) { size_t a = 0 ; size_t b = a; uint32_t x = 0; uint32_t y = x; return 0; }" JRTPLIB_STDINT)
if (JRTPLIB_STDINT)
    set(RTP_INTTYPE_HEADERS "#include <stdint.h>
#include <sys/types.h>")
else (JRTPLIB_STDINT)
    check_cxx_source_compiles("#include <inttypes.h>
#include <sys/types.h>
int main(void) { uint32_t x = 0; uint32_t y = x; return 0; }" JRTPLIB_INTTYPES)
    if (JRTPLIB_INTTYPES)
        set(RTP_INTTYPE_HEADERS "#include <inttypes.h>
#include <sys/types.h>
")
    else (JRTPLIB_INTTYPES)
        if (NOT UNIX AND WIN32)
            set(RTP_INTTYPE_HEADERS "#include "rtptypes_win.h"")
        else (NOT UNIX AND WIN32)
            set(RTP_INTTYPE_HEADERS "#error Could not find header files that define types like  uint32_t . Please edit the file ${PROJECT_BINARY_DIR}/src/rtptypes_unix.h and make sure that the following types are defined: int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t")
            message("

Error: Could not find header files that define types like  uint32_t .
Please edit the file ${PROJECT_BINARY_DIR}/src/rtptypes_unix.h
and make sure that the following types are defined: 
int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t

")
        endif (NOT UNIX AND WIN32)
    endif (JRTPLIB_INTTYPES)
endif (JRTPLIB_STDINT)

if (NOT UNIX AND WIN32)
    set(RTP_WINSOCK_HEADERS "#if defined(WIN32) || defined(_WIN32_WCE)
    #include <winsock2.h>   
  #include <ws2tcpip.h>
#ifndef _WIN32_WCE
 #include <sys/types.h>
#endif // _WIN32_WCE
#endif // WIN32 || _WIN32_WCE
")
endif (NOT UNIX AND WIN32)

if (NOT UNIX)
    set(JRTPLIB_COMPILE_STATIC ON CACHE BOOL "Flag indicating if a static library should be built, or a dynamic one")
    list(APPEND JRTPLIB_LINK_LIBS "ws2_32")
endif (NOT UNIX)

if (UNIX OR JRTPLIB_COMPILE_STATIC)
    set(JRTPLIB_IMPORT "")
    set(JRTPLIB_EXPORT "")
else (UNIX OR JRTPLIB_COMPILE_STATIC)
    set(JRTPLIB_IMPORT "__declspec(dllimport)")
    set(JRTPLIB_EXPORT "__declspec(dllexport)")
endif (UNIX OR JRTPLIB_COMPILE_STATIC)

configure_file("${PROJECT_SOURCE_DIR}/src/rtptypes.h.in" "${PROJECT_BINARY_DIR}/src/rtptypes.h")
configure_file("${PROJECT_SOURCE_DIR}/src/rtpconfig.h.in" "${PROJECT_BINARY_DIR}/src/rtpconfig.h")

save_paths(JRTPLIB_INTERNAL_INCLUDES "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}/src")

add_subdirectory(src)
add_subdirectory(examples)

if (UNIX)
    get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME jrtplib-shared LOCATION)
    get_filename_component(JRTPLIB_LIBNAME "${JRTPLIB_LOCAL_LIBRARY_NAME}" NAME)
    set(JRTPLIB_LIBS "${LIBRARY_INSTALL_DIR}/${JRTPLIB_LIBNAME}")
else (UNIX)
    if (JRTPLIB_COMPILE_STATIC)
        get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME jrtplib-static RELEASE_LOCATION)
        get_filename_component(JRTPLIB_LIBNAME_RELEASE "${JRTPLIB_LOCAL_LIBRARY_NAME}" NAME_WE)
        get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME jrtplib-static DEBUG_LOCATION)
        get_filename_component(JRTPLIB_LIBNAME_DEBUG "${JRTPLIB_LOCAL_LIBRARY_NAME}" NAME_WE)
    else (JRTPLIB_COMPILE_STATIC)
        get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME jrtplib-shared RELEASE_LOCATION)
        get_filename_component(JRTPLIB_LIBNAME_RELEASE "${JRTPLIB_LOCAL_LIBRARY_NAME}" NAME_WE)
        get_target_property(JRTPLIB_LOCAL_LIBRARY_NAME jrtplib-shared DEBUG_LOCATION)
        get_filename_component(JRTPLIB_LIBNAME_DEBUG "${JRTPLIB_LOCAL_LIBRARY_NAME}" NAME_WE)
    endif (JRTPLIB_COMPILE_STATIC)
    set(JRTPLIB_LIBS optimized "${LIBRARY_INSTALL_DIR}/${JRTPLIB_LIBNAME_RELEASE}.lib" 
                 debug "${LIBRARY_INSTALL_DIR}/${JRTPLIB_LIBNAME_DEBUG}.lib")
endif (UNIX)

set(JRTPLIB_INCDIRS ${JRTPLIB_EXTERNAL_INCLUDES} ${CMAKE_INSTALL_PREFIX}/include)
set(JRTPLIB_LIBS ${JRTPLIB_LIBS} ${JRTPLIB_LINK_LIBS})
remove_empty(JRTPLIB_INCDIRS)
list(REMOVE_DUPLICATES JRTPLIB_INCDIRS)
remove_empty(JRTPLIB_LIBS)

foreach(ARG ${JRTPLIB_LIBS})
    set(JRTPLIB_LIBS_CMAKECONFIG "${JRTPLIB_LIBS_CMAKECONFIG} "${ARG}"")
endforeach()
foreach(ARG ${JRTPLIB_INCDIRS})
    set(JRTPLIB_INCDIRS_CMAKECONFIG "${JRTPLIB_INCDIRS_CMAKECONFIG} "${ARG}"")
endforeach()

configure_file("${PROJECT_SOURCE_DIR}/cmake/JRTPLIBConfig.cmake.in" "${PROJECT_BINARY_DIR}/cmake/JRTPLIBConfig.cmake")
install(FILES "${PROJECT_BINARY_DIR}/cmake/JRTPLIBConfig.cmake" DESTINATION ${LIBRARY_INSTALL_DIR}/cmake/JRTPLIB)

if (UNIX)
    foreach(ARG ${JRTPLIB_LIBS})
        set(JRTPLIB_LIBS_PKGCONFIG "${JRTPLIB_LIBS_PKGCONFIG} ${ARG}")
    endforeach()
    foreach(ARG ${JRTPLIB_INCDIRS})
        set(JRTPLIB_INCDIRS_PKGCONFIG "${JRTPLIB_INCDIRS_PKGCONFIG} -I${ARG}")
    endforeach()

    configure_file(${PROJECT_SOURCE_DIR}/pkgconfig/jrtplib.pc.in ${PROJECT_BINARY_DIR}/pkgconfig/jrtplib.pc)
    install(FILES ${PROJECT_BINARY_DIR}/pkgconfig/jrtplib.pc DESTINATION ${LIBRARY_INSTALL_DIR}/pkgconfig)
endif (UNIX)
最佳回答

你在那里似乎有yn误:

GENERATE_EXPORT_HEADER( jrtplib} 
         BASE_NAME jrtplib
         EXPORT_MACRO_NAME jrtplib_EXPORT
         EXPORT_FILE_NAME jrtplib_Export.h
         STATIC_DEFINE jrtplib_BUILT_AS_STATIC

A } after Target name and there is no .

问题回答

暂无回答




相关问题
how to reliable capture display setting changed

static void Main() { // Set the SystemEvents class to receive event notification when a user // when display settings change. SystemEvents.DisplaySettingsChanged += new ...

Why use CComBSTR instead of just passing a WCHAR*?

I m new to COM. What exactly is the advantage of replacing: L"String" with CComBSTR(L"String") I can see a changelist in the COM part of my .NET application where all strings are replaced in this ...

COM Basic links

folks can you provide me the tutorial link or .pdf for learning basic COM?. i do google it.. still i recommend answers of stackoverflow so please pass me.. Thanks

Statically linking Winsock?

I m using Winsock 1.1 in my project. I include wsock32.lib in "Additional Dependencies". I m looking at the DLL project using depends.exe and notice that the DLL depends on wsock32.dll. How can I ...

热门标签