【问题标题】:Change the order of compiler flags更改编译器标志的顺序
【发布时间】:2016-04-01 23:45:05
【问题描述】:

为了防止“未定义的引用...”boost 错误,我需要在编译器标志的最后附加boost 库。因此,在 CMakeLists.txt 我设置:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pedantic -O0 -Wall -DBOOST_SYSTEM_NO_DEPRECATED -lboost_system -lboost_filesystem")

但是,cmake 的详细输出显示附加标志附加在我定义的标志后面:

g++ -std=c++11 -pedantic -O0 -Wall -DBOOST_SYSTEM_NO_DEPRECATED -lboost_system -lboost_filesystem  CMakeFiles/My_Project.dir/main.cpp.o  -o My_Project  -L/usr/local/boost_1_60_0/lib

是否可以更改顺序?

完整的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.4)
project(My_Project)

set(CMAKE_VERBOSE_MAKEFILE ON)

# This is bad but I currently don't have another working solution.
set(BOOSTROOT "/usr/local/boost_1_60_0/")
set(BOOST_ROOT "/usr/local/boost_1_60_0/")

find_package(Boost 1.60.0 COMPONENTS system filesystem REQUIRED)
if(Boost_FOUND)

    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")

    link_directories(${Boost_LIBRARY_DIRS})
    include_directories(${Boost_INCLUDE_DIRS})

endif()

add_executable(BoostTest main.cpp)

if(Boost_FOUND)

    target_link_libraries(BoostTest ${Boost_LIBRARIES})

endif()

# Boost libraries appended at the end. However, cmake generates flags like this:
# c++ -std=c++11 -pedantic -O0 -Wall -DBOOST_SYSTEM_NO_DEPRECATED -lboost_system -lboost_filesystem  CMakeFiles/My_Project.dir/main.cpp.o  -o My_Project  -L/usr/local/boost_1_60_0/lib
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pedantic -O0 -Wall -DBOOST_SYSTEM_NO_DEPRECATED -lboost_system -lboost_filesystem")
set(SOURCE_FILES main.cpp)
add_executable(My_Project ${SOURCE_FILES})

谢谢

【问题讨论】:

  • 您永远不需要更改编译器标志的顺序。但是,您确实需要在链接器标志的 value 中以正确的顺序列出库。

标签: c++ boost cmake clion


【解决方案1】:

您应该使用target_link_libraries 而不是手动将-lboost 指令附加到您的编译器标志中。

TARGET_LINK_LIBRARIES(My_Project boost)

还应该提到的是,链接器可能会在目标文件编译之后作为单独的调用被调用

【讨论】:

  • 这个成功了,谢谢!我不得不在 CMakeLists.txt 的最后添加这一行:target_link_libraries(My_Project boost_system boost_filesystem)
猜你喜欢
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多