簡體   English   中英

CMake生成的Xcode項目將無法編譯

[英]CMake generated Xcode project won't compile

我有一個在Mac上開發的C ++項目。 我可以使用ninja或gmake通過命令行構建它,而不會出現問題,但是一旦生成Xcode項目,它就會失敗。

該項目本身是一個靜態庫,該庫鏈接到運行googletest的命令行應用程序。

我得到的錯誤是,在構建最終可執行文件時,Xcode表示找不到靜態庫。 這是我的CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(MyProject)

SET(CMAKE_VERBOSE_MAKEFILE 0)  # set to 1 for verbose Makefile

SET(MyProject_VERSION_MAJOR 1)
SET(MyProject_VERSION_MINOR 0)
SET(CMAKE_BUILD_TYPE DEBUG)

ENABLE_LANGUAGE(CXX)

# Build the static lib
FILE(GLOB SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
FILE(GLOB G2LOG "${CMAKE_CURRENT_SOURCE_DIR}/src/g2log/*.cpp")
FILE(GLOB LIBZIP "${CMAKE_CURRENT_SOURCE_DIR}/src/libzip/*.c")
FILE(GLOB LIBXML "${CMAKE_CURRENT_SOURCE_DIR}/src/libxml/*.c")
FILE(GLOB LIBXSLT "${CMAKE_CURRENT_SOURCE_DIR}/src/libxslt/*.c")

# Settings that work with Unix, Linux and OSX
IF (UNIX)
    # Ideally we should use -Werror but libxml2 will break
    SET(FLAGS "-Wno-attributes -g -Wall -std=c++11 -stdlib=libc++ -Wunused -D_GLIBCXX_USE_NANOSLEEP -m64")
    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_REENTRANT -DTRIO_HAVE_CONFIG_H")
    FILE(GLOB to_remove "${CMAKE_CURRENT_SOURCE_DIR}/src/g2log/crashhandler_win.cpp")

    IF (${CMAKE_BUILD_TYPE} MATCHES DEBUG)
        SET(FLAGS "${FLAGS} -DGOOGLETEST")
    ENDIF(${CMAKE_BUILD_TYPE} MATCHES DEBUG)
ENDIF(UNIX)

IF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    SET(CMAKE_CXX_FLAGS  "${FLAGS}")
    INCLUDE_DIRECTORIES("/System/Library/Frameworks/")
    FIND_LIBRARY(APP_SERVICES_LIBRARY ApplicationServices)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    SET(CMAKE_CXX_FLAGS  "${FLAGS} -rdynamic")
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

IF (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    FILE(GLOB to_remove "${CMAKE_CURRENT_SOURCE_DIR}/src/g2log/crashhandler_unix.cpp")
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")

LIST(REMOVE_ITEM G2LOG ${to_remove})

# Build the main library
ADD_LIBRARY(g2log OBJECT ${G2LOG})
ADD_LIBRARY(libzip OBJECT ${LIBZIP})
ADD_LIBRARY(core OBJECT ${SOURCES})
ADD_LIBRARY(libxml OBJECT ${LIBXML})
ADD_LIBRARY(libxslt OBJECT ${LIBXSLT})
ADD_LIBRARY(MyProject STATIC $<TARGET_OBJECTS:core> $<TARGET_OBJECTS:libxslt> $<TARGET_OBJECTS:libxml> $<TARGET_OBJECTS:libzip> $<TARGET_OBJECTS:g2log>)

ADD_EXECUTABLE(MyProjectTests "${CMAKE_CURRENT_SOURCE_DIR}/tests/src/MyProjectTests.cpp")
TARGET_LINK_LIBRARIES(MyProjectTests MyProject)
IF (UNIX)
    TARGET_LINK_LIBRARIES(MyProjectTests "${CMAKE_CURRENT_SOURCE_DIR}/src/somelib/libsomelib.a")
    TARGET_LINK_LIBRARIES(MyProjectTests "${APP_SERVICES_LIBRARY}")
    TARGET_LINK_LIBRARIES(MyProjectTests "${CMAKE_CURRENT_SOURCE_DIR}/tests/src/libgtest.a")

    FIND_PACKAGE(ZLIB REQUIRED)
    IF (ZLIB_FOUND)
        INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS})
        TARGET_LINK_LIBRARIES(MyProjectTests ${ZLIB_LIBRARIES})
    ENDIF(ZLIB_FOUND)

    IF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
        # In OSX link to iconv installed by Macports
        LINK_DIRECTORIES("/opt/local/lib/")
        TARGET_LINK_LIBRARIES(MyProjectTests iconv)
    ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
ENDIF(UNIX)

您無法使用Xcode生成器創建僅由目標文件組成的庫。 文檔

Some native build systems may not like targets that have only object files,
so consider adding at least one real source file to any target that
references $<TARGET_OBJECTS:objlib>.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM