【发布时间】:2013-03-04 10:44:19
【问题描述】:
任务 -> 运行 Cmake 在 windows 中生成 dll,在 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} )
以下是我在配置后生成并在 CMake-gui 上生成时收到的以下错误
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 ]not 有效。 -
@Angew,感谢您的回复。好吧,我在问题区域中添加了我的错误消息。问题 2) 你提到了但是 [ STATIC | SHARED ] 无效,但这就是我在 google 上找到的在 linux 中创建 .so 文件的内容。如果这一步是错误的,你能指出为什么它是错误的,什么是正确的?谢谢
-
这是元语法。这意味着“将
STATIC(用于生成静态库)或SHARED(用于生成共享库)放在那里。”这就是你得到的错误。它正在寻找名为[、STATIC等的文件(因为关键字STATIC或SHARED,如果存在,必须是库名称之后的第一个参数)。只需使用您注释掉的行,就可以了。 -
这是一个选项列表。
[]中的所有内容都是可选的,每个有效选项由|分隔。所以,它要么是STATIC,要么是SHARED。顺便说一句,如果您阅读 CMake 文档,您还会看到插件库有一个MODULE选项。