CMake包含路径和源路径与Windows目录路径不同
CMake include and source paths are not the same as the Windows Directory paths
我想用Visual Studio 2010/VC10和CMake创建一个库。
Windows的树与CMake项目树不同。问题是CMake不会在Visual Studio中创建头文件和源文件。
我不能改变库的树,因为它是一个老的代码,很多库共享几个包含文件。
root
|-'includes
| '-foo.h
|-'src
| '-libprojects
| | '-foolib
| | | '-bin
| | | '-project
| | | | '-mak100
| | | | '-CMakeLists01.txt
| | | '-src
| | | | '-CMakeLists02.txt
| | | | '-foo.cxx
CMakeLists.txt只有一个数字需要解释。
CMakeLists01.txt
cmake_minimum_required (VERSION 2.8)
cmake_policy (SET CMP0015 NEW)
project (foolib)
set (CMAKE_BUILD_TYPE Debug)
include_directories ("${PROJECT_SOURCE_DIR}/../../../../include")
# This dosen't works and CMake can't find the CMakeLists02.txt ???
add_subdirectory("${PROJECT_SOURCE_DIR}/../src")
CMakeLists02.txt
# CMakeLists02.txt
set (QueryHeader
"./../../../../include/foo.h")
set (QuerySources
"foo.cxx")
问题:如何使用add_subdirectory()
将CMakeLists02.txt包含到CMakeLists01.txt中这是一个批处理文件,如果有人测试它
#doCMake.cmd
@echo off
call "c:Program Files (x86)Microsoft Visual Studio 10.0Common7Toolvsvars32.bat"
mkdir mak100
cd mak100
cmake -G "Visual Studio 10" ..
cd ..
pause
我刚刚给了你的例子一个尝试,解决方案是在错误信息
CMake Error at CMakeLists.txt:10 (add_subdirectory):
add_subdirectory not given a binary directory but the given source
directory ".../src/libprojects/foolib/src"
is not a subdirectory of
".../src/libprojects/foolib/project". When
specifying an out-of-tree source a binary directory must be explicitly
specified.
所以正如@LPs所指出的,请参见CMAKE添加子目录,而不是真实目录上的子目录。只需将add_subdirectory()
调用更改为如下内容:
add_subdirectory("../src" "src")
并且您不必在第一个参数前面加上${PROJECT_SOURCE_DIR}
和第二个参数前面加上${CMAKE_CURRENT_BINARY_DIR}
(两者都是默认值,参见add_subdirectory()
)。
我的建议是将main/libraries CMakeLists01.txt
放到foolib
文件夹中。那么你甚至不需要CMakeLists02.txt
。
src/libprojects/foolib/CMakeLists.txt :
cmake_minimum_required (VERSION 2.8)
project (foolib CXX)
include_directories("../../../include")
add_library(foo "src/foo.cxx")
特别是在源文件和头文件位于不同(子)文件夹的情况下,执行add_library(foo src/foo.cxx)
之类的操作完全可以/经常使用。
相关文章:
- Windows 非 ASCII 文件路径
- Windows 和 Linux 之间的相对路径分辨率差异?
- 我应该如何获取配置文件的绝对路径与 Windows .exe一起发布?
- 将带斜杠的 Unix 路径转换为 Windows 路径
- 在 Windows 10 下为 VTK 生成 Makefile 时,Qt mkspecs 的路径错误
- Windows上的libtool需要绝对路径,而我已经给了它绝对路径
- 为什么我不能将 Windows 环境路径与 ofstream 一起使用来编写文本文件?
- 找不到 windows.winmd – 如果指定了路径,错误会乘以
- 在 Windows 上,stat 和 GetFileAttributes 对于包含奇怪字符的路径失败
- 在Windows上设置编译器路径
- 从句柄获取Windows Explorer路径
- 如何正确设置Windows路径以通过CMAKE轻松识别
- C Windows-如何从其PID(错误)获取过程路径
- C 检索可执行文件的图标,用于Windows注册表图标路径
- 在 Windows 中加载共享库时在特定路径中选取 dll
- 在Windows上,何时有必要将附加到目录路径上,以使_stat成功
- libclang:添加编译器系统包含路径(Windows中的Python)
- 正在从Registry_TypeGroup1类获取注册表项路径(Windows事件跟踪)
- FreeType字体路径Windows
- 添加目录路径Windows 8.1