【发布时间】:2018-01-10 12:05:06
【问题描述】:
我正在尝试实现一个 CMakeLists.txt 来在 Linux 和 Windows 下编译我的项目。我使用两个库:SFML 和 boost。但是,我希望我的项目可以在 Linux 或 Windows 下构建,而无需用户安装库。
我解释一下。库 SFML 和 boost 被编译并放置在我的文件夹项目中,我希望无论我在哪台计算机上下载我的项目,我都可以构建它。
这是我的问题,我无法从我的文件夹项目、SFML 和 boost 库中的库文件夹进行外部链接。
这是我的 CMakeLists.txt :
cmake_minimum_required(VERSION 3.0)
project(r-type_client CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
include_directories(./boost/include
./SFML/include
./include
)
if(UNIX)
set(BOOST_LIBRARY
-L./boost/linux
-lboost_regex
)
set(SFML_LIBRARY
-L./SFML/linux
-lsfml-graphics
-lsfml-window
-lsfml-system
)
add_executable(r-type_client
srcs/Main.cpp
)
target_link_libraries(r-type_client
${BOOST_LIBRARY}
${SFML_LIBRARY}
)
elseif(WIN32)
add_library(bar SHARED IMPORTED)
set_property(TARGET bar PROPERTY IMPORTED_LOCATION
C:/Users/Hugo/Downloads/Old/client/SFML/windows/sfml-graphics.dll)
set_property(TARGET bar PROPERTY IMPORTED_IMPLIB
C:/Users/Hugo/Downloads/Old/client/SFML/windows/sfml-graphics.lib)
add_library(bor SHARED IMPORTED)
set_property(TARGET bor PROPERTY IMPORTED_LOCATION
C:/Users/Hugo/Downloads/Old/client/SFML/windows/sfml-window.dll)
set_property(TARGET bor PROPERTY IMPORTED_IMPLIB
C:/Users/Hugo/Downloads/Old/client/SFML/windows/sfml-window.lib)
add_library(bur SHARED IMPORTED)
set_property(TARGET bur PROPERTY IMPORTED_LOCATION
C:/Users/Hugo/Downloads/Old/client/SFML/windows/sfml-system.dll)
set_property(TARGET bur PROPERTY IMPORTED_IMPLIB
C:/Users/Hugo/Downloads/Old/client/SFML/windows/sfml-system.lib)
add_executable(r-type_client srcs/Main.cpp)
target_link_libraries(r-type_client bar bor bur)
endif(UNIX)
【问题讨论】:
-
SFML_LIBRARY应该只是要链接的库的名称。 -
BOOST_LIBRARYcmake 已经支持 boost。使用它。 -
你应该在 target_link_libraries 之前做 IMPORTED 的东西
-
@drescherjm 我的问题是针对 Windows 而不是 Linux
-
您应该使用
find_package()正确定位所有内容,以正确的方式设置您的CMake 项目。你现在的做法很容易出错(正如你所经历的那样)并且不是真正可移植的。如果您对所有内容都进行硬编码,那么例如设置一个 MSVC 项目会容易得多。您正在使用 CMake,但您基本上是在完全解决它。