使用 Cmake,如何防止库源包含在我的 IDE 中?

Posted

技术标签:

【中文标题】使用 Cmake,如何防止库源包含在我的 IDE 中?【英文标题】:Using Cmake, how do I prevent library sources from being included in my IDE? 【发布时间】:2016-01-16 00:24:21 【问题描述】:

在我的项目中使用一堆不同的库(来自 GitHub 源,未预编译),我将它们添加到我的目标中,就像这样在我的根 CMakeLists.txt 文件中:

add_subdirectory(lib/glew-1.13.0/build/cmake)
include_directories(SYSTEM $PROJECT_SOURCE_DIR/lib/glew-1.13.0/include/)

...

target_link_libraries(MyApp glew $GLEW_LIBRARIES ... )

但是,您可以从下面的屏幕截图中看到,Xcode 在我的项目中包含了这些库的所有源代码,这使得我必须滚动浏览才能找到 my 代码的列表非常长。

我在add_subdirectory 命令中尝试了EXCLUDE_FROM_ALL 标志,该标志从我的Xcode 项目中删除了库源,但是我无法编译我的项目,因为Xcode 根本不编译库。

此外,Xcode 会从库中向我发出大量警告,而我并不真正关心这些警告。将SYSTEM 标志与include_directories 命令一起使用并不能修复它。

解决这个问题的最佳方法是什么?我应该将我的库作为构建过程的一个完全独立的部分进行编译,而不是与我的可执行文件一起编译吗?

【问题讨论】:

使用 externalproject_add 构建外部项目。 cmake.org/cmake/help/v3.4/module/ExternalProject.html 【参考方案1】:

我不确定它是如何工作的,但试试这个:

在您的根 CMakeLists.txt 中打开 USE_FOLDERS

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

然后在添加完所有项目后,在所有第三方库上设置 FOLDER 目标属性:

set_property(TARGET target1 target2 ...
             PROPERTY FOLDER "ThirdPartyLibs")

【讨论】:

【参考方案2】:

由于不熟悉 C++,我认为我所有的库每次都应该与我的项目一起编译。我最终通过编写一个将我的所有库预编译为静态库的 shell 脚本解决了这个问题,现在我不必担心它们在我的 IDE 中的源代码,而且我的编译时间更快。

【讨论】:

以上是关于使用 Cmake,如何防止库源包含在我的 IDE 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 cmake 项目中包含另一个 cmake 项目的头文件?

如何将库源附加到 JetBrains Rider

OpenCV VS 2010 C++ CMake

如何使用 webpack 加载库源地图?

如何简单地将opencv包含在CMake的项目中

如何使用webpack加载库源映射?