任務 - >運行Cmake在Windows中生成DLL並在Linux中生成共享對象(.so文件)。CMake在linux中構建共享對象.so文件
我將代碼從windows移植到linux。我已經對源代碼進行了必要的更改。我試圖改變CMakeLists.txt文件,但當我試圖做它抱怨「無法找到源文件」。願你們指點我出錯的地方。 CMakeList.txt如下所示。 cmake在Windows中運行良好,但在Linux中它抱怨錯誤。
我已經評論了幾行,並在CMakeLIsts.txt中添加了一行,以使其在Linux中工作,但不起作用。
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
CMAKE_POLICY(SET CMP0017 NEW)
PROJECT(disk_space_model)
INCLUDE(../libs/helper_functions.cmake)
INCLUDE_THIRD_PARTY_SFC()
SET( HEADER_FILES
stdafx.h
INS_sensor_model.h
)
SET( SOURCE_FILES
Disk_space_model.cpp
)
SET( RESOURCE_FILES
"Disk Space DLL.rc"
resource.h
)
COMMON_SETUP()
SETUP_Lab_LIB_FILES(lib_foo lib_boo_files lib_platform lib_utils)
#ADD_DEFINITIONS(-D_USRDLL -DINSSENSORDLL_EXPORTS)
#ADD_LIBRARY(disk_space_model SHARED ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES} ${CMAKE_HELPER_FILES})
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-all-symbols")
ADD_LIBRARY(disk_space_model [ STATIC | SHARED ] ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES} ${CMAKE_HELPER_FILES})
SET_OUTPUT_DIRS(disk_space_model)
TARGET_LINK_LIBRARIES(disk_space_model ${LIB_FILES})
下面是當我提出congiure後做並生成CMake的貴
4 bit compiler
-- Configuring done
CMake Error at CMakeLists.txt:37 (ADD_LIBRARY):
Cannot find source file:
[
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
CMake Error in CMakeLists.txt:
Cannot find source file:
STATIC
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
CMake Error in CMakeLists.txt:
Cannot find source file:
|
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
CMake Error in CMakeLists.txt:
Cannot find source file:
SHARED
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
CMake Error in CMakeLists.txt:
Cannot find source file:
]
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
-- Build files have been written to: /home/mydir/svn/proj1/apps/disk space
make: *** [cmake_check_build_system] Error 1
哪些源文件可以「找不到?」另外,你確定要這樣覆蓋'CMAKE_SHARED_LINKER_FLAGS'嗎?或者只是添加到他們?如果這是您的實際語法,那是錯誤的:註釋行可以,但是[[STATIC | SHARED]'是**不是**有效。 – Angew 2013-03-04 10:55:41
@Angew,謝謝你的回覆。好吧,我在我的問題區域添加了我的錯誤消息。問題2)您提到但[STATIC | SHARED]無效,但這就是我在google上發現的在linux中創建.so文件的情況。如果這一步是錯誤的,請指出爲什麼它是錯誤的,哪一個是正確的?謝謝 – samprat 2013-03-04 11:15:14
它是metasyntax。它意味着「要麼在那裏放置'STATIC'(用於生成靜態庫)或'SHARED'(用於生成共享庫)。」這就是你得到的錯誤。它正在尋找名爲'''','STATIC'等的文件(因爲關鍵字'STATIC'或'SHARED',如果存在的話,必須是庫名後的第一個參數*)。只要使用你註釋掉的那一行,你應該沒問題。 – Angew 2013-03-04 11:17:30