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>.
相关文章:
- 当我尝试通过 mingw 使用 CMake 和 SFML 库编译项目时出错
- LD:尝试编译项目时找不到架构x86_64符号
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- 如何使用 Makefile 使用 VTK 库编译项目?
- UE4无法使用vs2017编译C++项目
- 无法让 CMAKE 编译项目
- 了解如何编译C++项目
- [UE4错误]无法编译项目.你想在Visual Studio中打开它吗?
- 使用 -O1 优化标志编译项目时共享库崩溃
- 每次都构建(make)lib,只有在lib较新时才重新编译项目
- 如何在 g++ 上使用 opencv 编译项目 c++
- 尝试使用 TMXlite 编译项目时LNK2019错误
- 编译项目时文件无效或损坏,包括 V8
- 为什么当我在Visual Studio中编译C++项目时会出现致命错误"LNK1104:无法打开文件'cryptlib.lib'?
- 在 netbeans 中编译项目中的单个文件
- 用cmake中的makefile编译项目
- 使用makefile编译C++项目时出现问题
- 用多个文件制作和编译C 项目
- 如何有条件地为 Eclipse 中的交叉编译项目包含两个不同名称的相同版本的库
- 如何编译项目后不运行exe文件