繁体   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