Parcourir la source

FindMono.cmake 更加完善了 windows和linux 均OK

tanghai il y a 14 ans
Parent
commit
45f0ecc3a7

+ 8 - 9
Cpp/CMakeLists.txt

@@ -24,27 +24,26 @@ INCLUDE_DIRECTORIES(ThirdParty)
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/ThirdParty)
 
 FIND_PACKAGE(GLog REQUIRED)
-INCLUDE_DIRECTORIES(${GLOG_INCLUDE_DIR})
+INCLUDE_DIRECTORIES(${GLOG_INCLUDE_DIRS})
 
 FIND_PACKAGE(GFlags REQUIRED)
-INCLUDE_DIRECTORIES(${GFLAGS_INCLUDE_DIR})
+INCLUDE_DIRECTORIES(${GFLAGS_INCLUDE_DIRS})
 
 FIND_PACKAGE(Protobuf REQUIRED)
-INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
-LINK_DIRECTORIES(${PROTOBUF_LIBRARY_DIR})
+INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIRS})
 
 FIND_PACKAGE(Perftools REQUIRED)
-INCLUDE_DIRECTORIES(${PERFTOOLS_INCLUDE_DIR})
-LINK_DIRECTORIES(${PERFTOOLS_LIBRARY_DIR})
+INCLUDE_DIRECTORIES(${PERFTOOLS_INCLUDE_DIRS})
+
+FIND_PACKAGE(Mono REQUIRED)
 
 FIND_PACKAGE(Boost REQUIRED thread system)
 SET(Boost_USE_STATIC_LIBS    ON)
 SET(Boost_USE_MULTITHREADED  ON)
 SET(Boost_USE_STATIC_RUNTIME OFF)
-INCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIR})
-LINK_DIRECTORIES(${Boost_LIBRARY_DIR})
 
-FIND_PACKAGE(Mono REQUIRED)
+GET_PROPERTY(IncludeDirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
+MESSAGE("IncludeDirs: ${IncludeDirs}")
 
 SET(ThirdPartyLibs
 	gtest

+ 8 - 10
Cpp/Cmake/FindGFlags.cmake

@@ -1,19 +1,17 @@
 FIND_PATH(GFLAGS_INCLUDE_DIR gflags/gflags.h)
 
-if(WIN32)
-    set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-endif()
+IF(WIN32)
+    SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+ENDIF()
 
 FIND_LIBRARY(GFLAGS_LIBRARY NAMES gflags
 			DOC "The Google Gflags Library"
 			)
 
-MARK_AS_ADVANCED(GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)
+SET(GFLAGS_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIR})
+SET(GFLAGS_LIBRARIES    ${GFLAGS_LIBRARY})
 
-include(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GFLAGS DEFAULT_MSG GFLAGS_LIBRARY GFLAGS_INCLUDE_DIR)
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GFLAGS DEFAULT_MSG GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)
 
-IF(GFLAGS_FOUND)
-	SET(GFLAGS_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIR})
-	SET(GFLAGS_LIBRARIES    ${GFLAGS_LIBRARY})
-ENDIF()
+MARK_AS_ADVANCED(GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)

+ 8 - 9
Cpp/Cmake/FindGLog.cmake

@@ -1,19 +1,18 @@
 FIND_PATH(GLOG_INCLUDE_DIR glog/logging.h)
 
-if(WIN32)
-    set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-endif()
+IF(WIN32)
+    SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+ENDIF()
 
 FIND_LIBRARY(GLOG_LIBRARY NAMES glog
 			DOC "The Google Glog Library"
 			)
 
-MARK_AS_ADVANCED(GLOG_INCLUDE_DIR GLOG_LIBRARY)
+
+SET(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
+SET(GLOG_LIBRARIES    ${GLOG_LIBRARY})
 
 INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLOG DEFAULT_MSG GLOG_LIBRARY GLOG_INCLUDE_DIR)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLOG DEFAULT_MSG GLOG_INCLUDE_DIR GLOG_LIBRARY)
 
-IF(GLOG_FOUND)
-	SET(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
-	SET(GLOG_LIBRARIES    ${GLOG_LIBRARY})
-ENDIF()
+MARK_AS_ADVANCED(GLOG_INCLUDE_DIR GLOG_LIBRARY)

+ 7 - 9
Cpp/Cmake/FindGMock.cmake

@@ -1,19 +1,17 @@
 FIND_PATH(GMOCK_INCLUDE_DIR gmock/gmock.h)
 
-if(WIN32)
-    set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-endif()
+IF(WIN32)
+    SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+ENDIF()
 
 FIND_LIBRARY(GMOCK_LIBRARY NAMES gmock
 			DOC "The Google Gmock Library"
 			)
 
-MARK_AS_ADVANCED(GMOCK_INCLUDE_DIR GMOCK_LIBRARY)
+SET(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR})
+SET(GMOCK_LIBRARIES    ${GMOCK_LIBRARY})
 
 INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMOCK DEFAULT_MSG GMOCK_LIBRARY GMOCK_INCLUDE_DIR)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMOCK DEFAULT_MSG GMOCK_INCLUDE_DIR GMOCK_LIBRARY)
 
-IF(GMOCK_FOUND)
-	SET(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR})
-	SET(GMOCK_LIBRARIES    ${GMOCK_LIBRARY})
-ENDIF()
+MARK_AS_ADVANCED(GMOCK_INCLUDE_DIR GMOCK_LIBRARY)

+ 9 - 8
Cpp/Cmake/FindGTest.cmake

@@ -1,19 +1,20 @@
 FIND_PATH(GTEST_INCLUDE_DIR gtest/gtest.h)
 
-if(WIN32)
-    set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-endif()
+IF(WIN32)
+    SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+ENDIF()
 
 FIND_LIBRARY(GTEST_LIBRARY NAMES gtest
 			DOC "The Google Gtest Library"
 			)
 
-MARK_AS_ADVANCED(GTEST_INCLUDE_DIR GTEST_LIBRARY)
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTEST DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR)
 
 IF(GTEST_FOUND)
 	SET(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
 	SET(GTEST_LIBRARIES    ${GTEST_LIBRARY})
-ENDIF()
+ENDIF()
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTEST DEFAULT_MSG GTEST_INCLUDE_DIR GTEST_LIBRARY)
+
+MARK_AS_ADVANCED(GTEST_INCLUDE_DIR GTEST_LIBRARY)

+ 20 - 11
Cpp/Cmake/FindMono.cmake

@@ -1,17 +1,26 @@
 FIND_PROGRAM(MONO_EXECUTABLE mono)
-FIND_PROGRAM(GMCS_EXECUTABLE gmcs)
-FIND_PROGRAM(GACUTIL_EXECUTABLE gacutil)
+FIND_PROGRAM(MONO_GMCS_EXECUTABLE gmcs)
+FIND_PROGRAM(MONO_GACUTIL_EXECUTABLE gacutil)
 
-SET(MONO_FOUND FALSE CACHE INTERNAL "")
-
-FIND_PACKAGE(PkgConfig)
-
-IF(PKG_CONFIG_FOUND)
-	EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --cflags mono-2 --variable=assemblies_dir OUTPUT_VARIABLE MONO_CXX_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
-	EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --libs mono-2 --variable=assemblies_dir OUTPUT_VARIABLE MONO_LINK_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+IF(WIN32)
+	FIND_PATH(MONO_INCLUDE_DIR mono/jit/jit.h)
+	SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+	SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" "")
+	FIND_LIBRARY(MONO_LIBRARY NAMES mono-2.0 DOC "The Mono Library")
+	FIND_PATH(MONO_LIBRARY_DIR mono-2.0.lib)
+ELSEIF(UNIX)
+	FIND_PACKAGE(PkgConfig REQUIRED)
+	PKG_SEARCH_MODULE(MONO mono-2 REQUIRED QUIET)
+	FIND_PATH(MONO_INCLUDE_DIR mono/jit/jit.h HINTS ${MONO_INCLUDE_DIR} ${MONO_INCLUDE_DIRS})
+	FIND_LIBRARY(MONO_LIBRARY NAMES mono-2.0 HINTS ${MONO_LIBRARY_DIRS})
 ENDIF()
 
-MARK_AS_ADVANCED(MONO_EXECUTABLE GMCS_EXECUTABLE GACUTIL_EXECUTABLE MONO_CXX_FLAGS MONO_LINK_FLAGS)
+SET(MONO_INCLUDE_DIRS ${MONO_INCLUDE_DIR})
+SET(MONO_LIBRARIES ${MONO_LIBRARY})
+SET(MONO_LIBRARY_DIRS ${MONO_LIBRARY_DIR})
 
 INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(MONO DEFAULT_MSG MONO_EXECUTABLE GMCS_EXECUTABLE GACUTIL_EXECUTABLE MONO_CXX_FLAGS MONO_LINK_FLAGS)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(MONO DEFAULT_MSG
+		MONO_EXECUTABLE MONO_GMCS_EXECUTABLE MONO_GACUTIL_EXECUTABLE MONO_INCLUDE_DIR MONO_LIBRARY MONO_LIBRARY_DIR)
+
+MARK_AS_ADVANCED(MONO_EXECUTABLE MONO_GMCS_EXECUTABLE MONO_GACUTIL_EXECUTABLE MONO_INCLUDE_DIR MONO_LIBRARY MONO_LIBRARY_DIR)

+ 7 - 10
Cpp/Cmake/FindPerftools.cmake

@@ -1,7 +1,7 @@
 FIND_PATH(PERFTOOLS_INCLUDE_DIR google/tcmalloc.h)
 
 IF(WIN32)
-	set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+	SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
 	FIND_LIBRARY(PERFTOOLS_DEBUG_LIBRARY NAMES tcmalloc_minimal-debug
 		DOC "The Google Perftools Debug Library"
 		)
@@ -19,16 +19,13 @@ FIND_LIBRARY(PERFTOOLS_PROFILE_LIBRARY NAMES profiler
 			DOC "The Google Perftools Profile Library"
 			)
 
-MARK_AS_ADVANCED(PERFTOOLS_INCLUDE_DIR PERFTOOLS_DEBUG_LIBRARY PERFTOOLS_LIBRARY PERFTOOLS_PROFILE_LIBRARY)
+SET(PERFTOOLS_INCLUDE_DIRS ${PERFTOOLS_INCLUDE_DIR})
+SET(PERFTOOLS_DEBUG_LIBRARIES ${PERFTOOLS_DEBUG_LIBRARY})
+SET(PERFTOOLS_LIBRARIES ${PERFTOOLS_LIBRARY})
+SET(PERFTOOLS_PROFILE_LIBRARIES ${PERFTOOLS_PROFILE_LIBRARY})
 
 INCLUDE(FindPackageHandleStandardArgs)
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(PERFTOOLS DEFAULT_MSG 
-    PERFTOOLS_LIBRARY PERFTOOLS_DEBUG_LIBRARY PERFTOOLS_PROFILE_LIBRARY 
-    PERFTOOLS_INCLUDE_DIR)
+		PERFTOOLS_INCLUDE_DIR PERFTOOLS_DEBUG_LIBRARY PERFTOOLS_LIBRARY PERFTOOLS_PROFILE_LIBRARY)
 
-IF(PERFTOOLS_FOUND)
-	SET(PERFTOOLS_INCLUDE_DIRS ${PERFTOOLS_INCLUDE_DIR})
-	SET(PERFTOOLS_DEBUG_LIBRARIES ${PERFTOOLS_DEBUG_LIBRARY})
-	SET(PERFTOOLS_LIBRARIES ${PERFTOOLS_LIBRARY})
-	SET(PERFTOOLS_PROFILE_LIBRARIES ${PERFTOOLS_PROFILE_LIBRARY})
-ENDIF()
+MARK_AS_ADVANCED(PERFTOOLS_INCLUDE_DIR PERFTOOLS_DEBUG_LIBRARY PERFTOOLS_LIBRARY PERFTOOLS_PROFILE_LIBRARY)

+ 12 - 8
Cpp/Platform/Mono/CMakeLists.txt

@@ -8,17 +8,17 @@ SET(MonoSrc
 ADD_LIBRARY(Mono ${MonoSrc})
 SET_PROPERTY(TARGET Mono PROPERTY FOLDER "Platform")
 
-IF(UNIX)
-	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MONO_CXX_FLAGS}")
-	SET(CMAKE_LINK_LIBRARY_FLAG "${CMAKE_LINK_LIBRARY_FLAG} ${MONO_LINK_FLAGS}")
+IF(MSVC)
+	SET(MonoLibRelativeDir ${CMAKE_BUILD_TYPE})
+ELSEIF(UNIX)
+	SET(MonoLibRelativeDir "")
 ENDIF()
 
 FILE(GLOB MonoCsharpSrc "*.cs")
-MESSAGE(STATUS ${MonoCsharpSrc})
 ADD_CUSTOM_COMMAND(
 	OUTPUT MonoInit.exe
-	COMMAND ${GMCS_EXECUTABLE} 
-	ARGS ${MonoCsharpSrc} -out:${CMAKE_CURRENT_BINARY_DIR}/MonoInit.exe
+	COMMAND ${MONO_GMCS_EXECUTABLE} 
+	ARGS ${MonoCsharpSrc} -out:${CMAKE_CURRENT_BINARY_DIR}/${MonoLibRelativeDir}/MonoInit.exe
 	DEPENDS ${MonoCsharpSrc}
 )
 
@@ -26,17 +26,21 @@ ADD_CUSTOM_TARGET(MonoInitTestAssembly
 	DEPENDS MonoInit.exe
 )
 
+INCLUDE_DIRECTORIES(${MONO_INCLUDE_DIRS})
+LINK_DIRECTORIES(${MONO_LIBRARY_DIRS})
+
 ADD_EXECUTABLE(MonoInitTest MonoInitTest.cc)
 
 ADD_DEPENDENCIES(MonoInitTest MonoInitTestAssembly)
 
-SET(Tests 
+SET(Tests
 	MonoInitTest
 )
 
 FOREACH(Test ${Tests})
 	TARGET_LINK_LIBRARIES(${Test}
-		Mono
+		${Mono} 
+		${MONO_LIBRARIES} 
 		${ThirdPartyLibs}
 	)
 	ADD_TEST(${Test} ${Test})