Это изменяет флаги компилятора, но не флаги ссылки:
set(CMAKE_CXX_FLAGS "-lstdc++fs")
Это означает, что когда вы компилируете файл, вы добавляете библиотеку, которая не имеет никакого эффекта, а затем при ссылке на созданиеВаш исполняемый файл, вы не получаете этот флаг.
Таким образом, вы должны фактически изменить компоновщик с помощью:
target_link_libraries(target PRIVATE stdc++fs)
вместо link_libraries
(который является старымстиль CMake и не подходит для работы с несколькими целями).
target_link_libraries
рекомендуется, поскольку он только добавляет библиотеку к target
.PRIVATE
также указывает, что не следует распространять ссылку для общих библиотек (т.е. зависимые библиотеки не будут ссылаться на stdc++fs
).
Вы можете проверить разницу в поведении между ними, выполнив:
VERBOSE=1 make