Mac에서 개발 한 C++ 프로젝트가 있습니다. ninja 또는 gmake를 사용하여 문제없이 명령 줄을 통해 빌드 할 수 있지만 일단 Xcode 프로젝트를 생성하면 실패합니다.CMake 생성 된 Xcode 프로젝트가 컴파일되지 않습니다.
프로젝트 자체는 googletest를 실행하는 명령 줄 앱에 연결된 정적 라이브러리입니다.
내가 얻는 오류는 최종 실행 파일을 빌드 할 때 정적 라이브러리를 찾을 수 없다는 것입니다. 여기 내 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로 드래그 할 수 있지만 CMake가 대신 해줍니다. – ruipacheco
예, 나는 CMake에서 파일을 생성하라는 지시를 받았습니다. 샘플 코드에서 STATIC 명령으로 생성 된 것입니다. – ruipacheco