我已经开始使用CMake作为跨平台命令行程序的构建工具,该程序需要FFTW3和Boost.Format。我熟悉已安装库的头文件和二进制文件的类似Unix的标准目录结构,但我想知道Windows平台上的准标准是关于库的安装,组织等的方式和位置。是否有任何准标准我可以在我的CMakeLists.txt / FindXXX.cmake脚本中使用环境变量来查找库?我应该在哪里将FFTW3标头和二进制文件放在Windows平台上?在Windows机器上安装像pkg-config这样的东西是否有意义?显然,我不想对库的路径进行硬编码,因此它只能在具有完全相同目录结构的Windows机器上运行。
TIA, sellibitze
答案 0 :(得分:1)
Windows的默认安装路径通常类似于C:\Program Files\<company name>\<app name>\
或C:\Program Files\<app name>\
。但是,FFTW以zip文件的形式出现,由用户决定放在哪里。我可能会让CMake查找模块检查前面提到的两个点,如果没有找到任何内容,请发出信息性消息。
也许其他人会有更好的建议。
答案 1 :(得分:0)
CMake有一个有趣的功能是它会保留您在./configure命令行中为非标准库位置指定的值的缓存。
我的做事方式如下:
然后,在编译我的基于CMake的项目时,我运行图形工具来生成CMakeCache.txt文件,而不是关心未能找到我的外部库的FindXXX模块触发的错误。
相反,我将使用CMake GUI浏览头文件和库文件所在的目录,并手动设置正确的文件夹。只要未删除缓存,即使修改了CMakeLists.txt文件,这些路径仍将保留在CMakeCache.txt中。
在某些情况下,已安装的库会设置环境变量,CMake模块可以使用这些变量来定位它们,例如Boost(BOOST_ROOT变量)。这样就可以很容易地在带有CMake的窗口中使用已安装的Boost,如下所示:
##### Boost libraries #####
include(FindBoost)
if(MSVC)
find_package(Boost 1.40.0 REQUIRED) # msvc autolink support means we don't specify libs
else(MSVC)
find_package(Boost 1.40.0 REQUIRED COMPONENTS system)
endif(MSVC)
include_directories(${Boost_INCLUDE_DIRS})
set(Boost_USE_STATIC_LIBS ON)
link_directories(${Boost_LIBRARY_DIRS})
然后,您可以将您的可执行文件与Boost链接,执行以下操作:
add_executable(program_example program_example.cpp)
target_link_libraries(program_example ${Boost_LIBRARIES})
答案 2 :(得分:-1)
您是否考虑过为Windows目标安装cygwin?这至少可以解决遵守什么标准的问题。