更改cmake源搜索位置

时间:2015-07-28 20:55:54

标签: cmake

我有以下目录结构:

├───3rd
│   └───lua // this is git submodule, I can't modify anything here
│       ├───doc
│       └───src
└───cmake
    └───lua // CMakeLists.txt for ../../3rd/lua is here

我将外部图书馆拉到我的回购中让我们说lua。在分发中没有cmake支持。我无法使用nmake在windows上构建它。然后我想在我的回购中为lua创建一个CMakeLists.txt

我们假设CMakeLists.txt./cmake/lua/CMakeLists.txt中的lua。相对于这个位置,我必须指定前缀为../../3rd/lua/src/的源,这不是很好

set(SOURCES
    ../../3rd/lua/src/lapi.c
    ../../3rd/lua/src/lauxlib.c
    ../../3rd/lua/src/lbaselib.c
    <...>)
add_library(liblua ${SOURCES}).

../../3rd/lua/src/放入变量并为每个源文件添加前缀也不是很好。所以我想用${PROJECT_SOURCE_DIR}/../../3rd/lua/src更改源文件的基本搜索路径。我还想影响include_directories的基本路径。我认为改变PROJECT_SOURCE_DIR会这样做,但它根本没有效果。

我使用了CMAKE: Print out all accessible variables in a script中的脚本列出了所有变量,并且所有变量都引用了我改为${PROJECT_SOURCE_DIR}/../../3rd/lua/src的CMakeLists.txt位置:

set(CMAKE_CURRENT_LIST_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(CMAKE_CURRENT_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(CMAKE_HOME_DIRECTORY C:/dev/lua-external-cmake/3rd/lua/src)
set(CMAKE_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(PROJECT_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(Project_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)

似乎没有这样的变量,因为这种变化没有效果。我知道改变其中一些是完全错误的。我这样做只是为了找出是否会有任何影响。

那么,如何在cmake中更改包含文件的源搜索位置和基本路径?

1 个答案:

答案 0 :(得分:3)

CMake中没有source search path。但是您可以使用常见的cmake命令轻松“重新绑定”源:

set(SOURCES
    lapi.c
    lauxlib.c
    lbaselib.c
    <...>)
set(SOURCES_ABS)
foreach(source ${SOURCES})
    list(APPEND SOURCES_ABS ${PROJECT_SOURCE_DIR}/../../3rd/lua/src/${source})
endforeach()
add_library(liblua ${SOURCES_ABS}).