2013-03-04 101 views
1

任務 - >運行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 
+0

哪些源文件可以「找不到?」另外,你確定要這樣覆蓋'CMAKE_SHARED_LINKER_FLAGS'嗎?或者只是添加到他們?如果這是您的實際語法,那是錯誤的:註釋行可以,但是[[STATIC | SHARED]'是**不是**有效。 – Angew 2013-03-04 10:55:41

+0

@Angew,謝謝你的回覆。好吧,我在我的問題區域添加了我的錯誤消息。問題2)您提到但[STATIC | SHARED]無效,但這就是我在google上發現的在linux中創建.so文件的情況。如果這一步是錯誤的,請指出爲什麼它是錯誤的,哪一個是正確的?謝謝 – samprat 2013-03-04 11:15:14

+1

它是metasyntax。它意味着「要麼在那裏放置'STATIC'(用於生成靜態庫)或'SHARED'(用於生成共享庫)。」這就是你得到的錯誤。它正在尋找名爲'''','STATIC'等的文件(因爲關鍵字'STATIC'或'SHARED',如果存在的話,必須是庫名後的第一個參數*)。只要使用你註釋掉的那一行,你應該沒問題。 – Angew 2013-03-04 11:17:30

回答

3

這是因爲這打破了我收到以下錯誤:

ADD_LIBRARY(disk_space_model [ STATIC | SHARED ] ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES} ${CMAKE_HELPER_FILES}) 

我猜你從文檔複製粘貼[ STATIC | SHARED ]。這應該是STATICSHARED(後者,在你的情況)的選擇。

+0

我已經添加了該行,因爲當我嘗試了一個選項時,它抱怨缺少文件。例如c + +:錯誤:foo:沒有這樣的文件或目錄 c + +:錯誤:DLL:沒有這樣的文件或目錄雖然如果我試圖在Windows中構建它。它完美無瑕。 – samprat 2013-03-04 11:24:33

+0

你也不應該在ADD_LIBRARY中包含HEADER_FILES。它沒有意義:源(實現)文件是你在C++中創建的,而不是頭文件。 – 2013-03-04 11:26:10

+2

@JohnZwinck不正確。在CMakeLists中,您通常會在'add_library()'/'add_executable()'調用中列出頭文件,以便它們顯示在Visual Studio和其他IDE中的項目文件列表中。他們仍然不會被編譯。 – Angew 2013-03-04 12:55:13

相關問題