0

我是新来的clion。在 gcc 上我总是使用:

g++  bin/obj/main.o -o bin/main -lboost_filesystem -lboost_system -lcrypto

如何在clion中做到这一点?

看来我的CMakeList不起作用:

cmake_minimum_required(VERSION 3.1)
project(motion_simulation)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)
add_executable(motion_simulation ${SOURCE_FILES})
link_libraries(lboost_filesystem)
link_libraries(lboost_system)
link_libraries(lcrypto)
4

2 回答 2

4

下次尝试在搜索中包含关键字“CMake”。这个问题实际上不是 CLion 特定的,因为 CLion 实际上使用 CMake 作为构建系统。CMake 有很好的文档记录,您应该能够找到很多关于您的问题的答案。

您可以首先尝试摆脱那个“l”:

link_libraries(boost_filesystem)

如果这不起作用,您应该看看 find_package() 命令是如何工作的。http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries

这里详细解释了如何找到 Boost 库和包含目录。 http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html

于 2015-03-30T10:49:54.650 回答
1

当您使用 CMake 3.1 时,您可以使用 CMake 的一些更高级的功能。

CMAKE_CXX_STANDARD您可以选择要使用的 C++ 版本,CMake 将选择相应的编译器标志(请参阅文档

link_libraries是一种可能性,但必须在add_executableor之前调用add_library。另一种方法是target_link_libraries仅链接到单个目标,但也可以管理传递依赖项(docs)。

CMake 带有find_package用于 OpenSSL 和 Boost 的模块以查找依赖项,并且通过选项REQUIRED,您可以确保在系统上找到它们。Boost 还支持COMPONENTS选择您需要的库。

如果您曾经在未安装 OpenSSL 和 Boost 的系统上工作/usr/,您已经可以使用它target_include_directories来指定可执行文件的标头所在的位置。就像target_link_libraries,target_include_directories可以使用传递依赖,在这种情况下PRIVATE.

 cmake_minimum_required(VERSION 3.1)
 project(motion_simulation)

 set(CMAKE_CXX_STANDARD 11)

 find_package(Boost REQUIRED COMPONENTS filesystem system)
 find_package(OpenSSL REQUIRED)

 set(SOURCE_FILES main.cpp)
 add_executable(motion_simulation ${SOURCE_FILES})
 target_include_directories(motion_simulation PRIVATE ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR})
 target_link_libraries( motion_simulation PRIVATE ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES})
于 2015-04-02T09:21:09.100 回答