安装多个版本的 FLTK
,这里选的是 1.3.8
,其他版本也类似。
我的想法是安装到 /repository/cmake/fltk/{version} 用路径来区分版本号,找的时候也这么找。
生成
下载源代码并解压到 /path/to/fltk-1.3.8
# powershell
cmake -S /path/to/fltk-1.3.8 `
-B /path/to/fltk-1.3.8/build `
-G "Visual Studio 17 2022" `
-DCMAKE_INSTALL_PREFIX=/path/to/repo/fltk/1.3.8
构建
# powershell
cmake --build /path/to/fltk-1.3.8/build --config Release -- "-m:30"
安装
# powershell
# 生成的时候指定过安装路径,这里不指定了
cmake --install /path/to/fltk-1.3.8/build
FindFLTK.cmake 文件修改
要复制构建目录下的 CMakeCache.txt
文件到 /path/to/repo/fltk/1.3.8/CMake
文件夹。
不然后面的 load_cache()
命令会报错。
# powershell
cp /path/to/fltk-1.3.8/build/CMakeCache.txt /path/to/repo/fltk/1.3.8/CMake
全贴了代码换行符会消失,所以只贴修改过的地方。
1. 根据第一行注释可以搜索到
# Construct a set of paths relative to the system search path.
# 这一块原先的有问题, Windows安装的话必须把安装目录名称改成 lib 这个文件才能找到
set(FLTK_DIR_SEARCH "")
foreach(dir ${FLTK_DIR_SEARCH2})
if(WIN32)
# 添加 fltk/{version} 的支持
# 将原先的目录改成 ${dir}/fltk
set(FLTK_DIR_SEARCH ${FLTK_DIR_SEARCH} "${dir}/fltk;${dir}/fltk/${FLTK_FIND_VERSION}")
else()
set(FLTK_DIR_SEARCH ${FLTK_DIR_SEARCH} "${dir}/../lib/fltk")
endif()
endforeach()
string(REPLACE "//" "/" FLTK_DIR_SEARCH "${FLTK_DIR_SEARCH}")
2. 也是根据注释可以搜到
#
# Look for an installation or build tree.
#
# Win32 需要重写 find_path(), 不然根本找不到 FLTKConfig.cmake
# 看原来的代码,好像 FLTKConfig.cmake 文件是在 fltk 文件夹下的,但 Windows install 了之后,是在 fltk/CMake 下面
if(WIN32)
find_path(FLTK_DIR FLTKConfig.cmake
HINTS
ENV FLTK_DIR
${FLTK_DIR_SEARCH}
PATH_SUFFIXES
include
lib
bin
CMake
DOC "The ${FLTK_DIR_STRING}"
)
else()
find_path(FLTK_DIR FLTKConfig.cmake
HINTS
ENV FLTK_DIR
${FLTK_DIR_SEARCH}
PATH_SUFFIXES
fltk
fltk/include
lib/fltk
lib/fltk/include
DOC "The ${FLTK_DIR_STRING}"
)
endif()
3. 搜索 set(FLTK_INCLUDE_DIR ${FLTK_DIR})
# Windows FLTK_DIR 的值是 /path/to/repo/fltk/1.3.8/CMake
if(NOT FLTK_INCLUDE_DIR)
if(WIN32)
set(FLTK_INCLUDE_DIR "${FLTK_DIR}/../include")
else()
set(FLTK_INCLUDE_DIR ${FLTK_DIR})
endif()
endif()