Команда сразу после определения минимальной версии (и, следовательно, перед любыми настройками компилятора) решила проблему, и код теперь успешно строится с первой попытки, включая все предупреждения компилятора, которые я пропустил. Спасибо! - И спасибо за ссылки, я тоже проверю их. ;-)

ользую CMake 3.8.2, GNU make 4.2.1 и GCC 6.4.0 для моего проекта C ++ 14, и я заметил странное поведение при сборке. Я использую CMake для сборки из исходного кода в подпапке под названием «build», где я запускаюcmake .. с последующимmake.

CMake работает нормально без каких-либо ошибок, и make будет собирать все исходные файлы, как я ожидал, пока не завершит компиляцию и не начнет их связывать. Затем произойдет сбой с ошибкой

[ 83%] ...
[100%] Linking CXX executable myproject
/usr/bin/ld: some-source-file.cc.o: undefined reference to symbol '_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21'

Интересно, что он не показывает никаких предупреждений компилятора до этого момента, а показывает только вышеупомянутую ошибку компоновщика.

Теперь, когда я игнорирую ошибку и просто запускаюcmake .. а потомmake снова (как и раньше) я получаю все предупреждения компилятора о том, что мой код должен выдавать, и все ссылки отлично работают, даже если я не изменил ни кода, ни файлов, связанных с CMake.

Я могу воспроизвести это поведение, удалив все файлы вbuild Дир бегомrm -r *.

Вот мойCMakeLists.txt файл:

# Define minimum required CMake version
cmake_minimum_required(VERSION 3.8.2)

# Setting compiler related settings
set(CMAKE_CXX_COMPILER "${CMAKE_SOURCE_DIR}/toolchain/binary/gcc-6.4.0/bin/gcc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -O2 -lstdc++")
set(CMAKE_CXX_STANDARD 14)

# Define project name
project(MyProject)

# Find source files
file(GLOB_RECURSE SOURCES application/*.cc)

# Adding third-party sources
set(SOURCES ${SOURCES} "third-party/cpp-base64/base64.cpp")

# Executable to be built from which source files
add_executable(myproject ${SOURCES})

# Find and include and link Botan
find_library(BOTAN botan-2 "third-party/botan/build/lib")
include_directories("third-party/botan/build/include/botan-2")

# Includes that are part of the project
include_directories("${CMAKE_SOURCE_DIR}/application/include")

# Include nlohmann/json
include_directories("third-party/json/src")

# Include cpp-base64 by René Nyffenegger
include_directories("third-party/cpp-base64")

find_package(Boost REQUIRED COMPONENTS program_options)
if(Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
endif()

# Link third-party libraries
target_link_libraries(myproject ${Boost_LIBRARIES} ${BOTAN})

Примечание: я обязан зарегистрировать компилятор и библиотеки, которые я использую, поэтому я указал их в файле CMake.

Ответы на вопрос(1)

Ваш ответ на вопрос