我有一个 conda 环境,安装了:cmake、cxx-compiler、make 和 boost。我想编译一个我写的程序。如果我使用系统编译器,它工作得很好,但我想使用 conda-build 创建一个 conda 包,我在正常的 conda 环境中遇到了同样的问题。编译器找不到boost头文件:
fatal error: boost/program_options.hpp: No such file or directory
10 | #include <boost/program_options.hpp>
我使用 CMake,它确实找到了提升:
cmake -S . -B build
-- The CXX compiler identification is GNU 12.3.0
[...]
Found Boost: /home/username/miniforge3/envs/devel/lib/cmake/Boost-1.84.0/BoostConfig.cmake (found suitable version "1.84.0", minimum required is "1.74") found components: system program_options iostreams unit_test_framework
[...]
在 CMakeLists.txt 中使用此设置:
FIND_PACKAGE(Boost 1.74 REQUIRED COMPONENTS system program_options iostreams unit_test_framework)
target_include_directories(my_exectuable
SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}
)
但是,当运行构建步骤时:
cmake --build build
[...]
fatal error: boost/program_options.hpp: No such file or directory
10 | #include <boost/program_options.hpp>
compilation terminated.
如果我更改安装 gxx 而不是 cxx-compiler,那么编译也可以正常工作(但 bioconda 配方需要 cxx-compiler),所以这不是一个解决方案。
我查看了现有的bioconda配方并尝试了不同的设置,其中$PREFIX被传递到CMake,但我总是得到相同的结果。
问题是由 CMakeLists.txt 中的以下行引起的:
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wunused -pedantic")
更改为
add_compile_options(-Wall -Wextra -Wpedantic)
解决了问题。
我假设 cxx-compiler 包设置了一些被覆盖的特定标志。