草庐IT

cmake-custom-command

全部标签

c++ - 代码解析不适用于 CUDA、Clion 和 CMake

我有一个分为模块的项目,这是一个虚拟示例:根CMakeLists.txt模块工具CMakeLists.txt来源util_file.cpp库达CMakeLists.txt来源cuda_file.cu如果我使用CLion编辑cuda_file.cu,CLion将无法解析所有符号(甚至包括标准库中的符号)。所有代码完成/创建功能当然都消失了(除其他外)。问题似乎是,每当您创建仅包含CUDA文件的库或可执行文件时,Clion就会变得愚蠢并且不再解析或解析任何内容。我发现了两种解决方法,但它们使用起来不友好或“干净”:将一个空的.cpp文件添加到目录并将其添加到add_library()CMa

c++ - CMake:修改共享库时的冗余链接

我从事的项目由几十个共享库组成,每个共享库都有许多关联的单元测试。许多库还依赖于其他库,因为某些特定功能的库将使用来自更常见库之一的代码。最后当然还有依赖库的生产可执行文件。毫无疑问,某些核心公共(public)库的API(头文件)的更改应该会触发几乎整个系统的重大重新编译。但通常只在实现上有变化,唯一编译的文件是修改后的.cxx,理论上只需要链接修改后的库——多亏了动态链接,应该不需要重新链接任何其他东西。但是CMake继续执行它:在重新链接lib之后,它会重新链接与该lib关联的所有单元测试。然后它重新链接该库的依赖树中的所有库及其所有单元测试。最后它重新链接生产可执行文件。由于项

c++ - 对于可重定位的多平台安装,理想的 cmake 安装目录结构是什么?

CMake安装采用目标目录,通常使用GNUInstallDirs加载目标名称的标准值。例如:include(GNUInstallDirs)install(TARGETSFooEXPORTFooINCLUDESDESTINATION${CMAKE_INSTALL_INCLUDEDIR}RUNTIMEDESTINATION${CMAKE_INSTALL_BINDIR}ARCHIVEDESTINATION${CMAKE_INSTALL_LIBDIR}LIBRARYDESTINATION${CMAKE_INSTALL_LIBDIR})但是它不提供针对不同平台或架构构建的不同路径。我一直在通过C

如何将CMAKE用于Fortran和C ++?

我是Cmake的新手,似乎很难获得我的脚本工作。我的代码可以以通常的方式编译,但我确实需要使用CMAKE。我编译以下内容:g++vectc.cpp-c-std=c++11gfortranvectf.fvectc.o-lstdc++这个cmakelists.txt,这对我不起作用:cmake_minimum_required(VERSION2.6)project(add_vectorsCXXFortran)enable_language(Fortran)set(CMAKE_CXX_FLAGS"-c-std=c++11")set(CMAKE_Fortran_FLAGS"CMakeFiles/exe

c++ - 替代 CMake

我在visualstudio中使用CMake构建规则来预处理我的文件,然后再将它们提交给编译器,但我的客户不喜欢它。是否有任何CMake替代方法或方法来预处理我的文件并将它们集成到visualstudio中? 最佳答案 据我了解,您正在使用CMake生成您手动创建的VS项目使用的文件。无论出于何种原因,您的VS项目的客户都不喜欢CMake。据推测,您已经通过创建调用CMake以生成项目中的文件的自定义构建步骤来连接它,或者作为项目上的构建事件,或者作为项目中各种文件的自定义构建步骤,例如脚本的输入。VS允许您运行任意一组命令作为构建

c++ - 如何使静态导入库依赖于CMake中的另一个静态导入库?

我希望我的项目中很少更改的某些部分被静态编译并“安装”在单独的目录中。这是必要的,因为由于项目的某些细节,它经常必须从头开始重新编译(删除整个构建目录)。在单独的目录中“安装”静态链接库将显着减少构建时间。我一开始有什么。假设LibA很少更改,我希望它只安装一次,而不是在大多数项目构建期间重新构建。LibA依赖于一些第3方导入的库LibC。项目还包含经常更改并依赖于LibA的LibB。CMakeLists.tst(LibB):target_link_libraries("LibB"LibA_build)CMakeLists.tst(LibA):add_library(LibA_buil

c++ - CMake 相当于 Visual Studio 的 Property Sheets (.vsprops)

我正在尝试从VisualStudio迁移到Jetbrains(很棒)CLionIDE使用CMake组织项目。到目前为止,过渡一直很顺利:创建CMake项目并将它们导入CLion很容易,我可以在一个平台上开始编码,然后在另一个平台上继续,没有任何问题。但是,我在CMake中找不到对应的VisualStudio的一个方面是propertysheets:我主要使用它们来保存包含目录的路径和库的链接库(即每个库一个.vsprops文件,例如OpenCV.vsprops,Boost.vsprops等)。这样,在VS中,我可以在不同项目之间共享库的.vsprops文件,而无需每次都配置路径/库。C

c++ - 子目录中的CMake链接库

我正在尝试在我的项目中包含SFML源代码。我的目录布局如下:mainSFML(subtreesyncedwiththeofficialgitrepo)srcGeneral(hereliesthebinary)从主级别开始,我首先添加SFML子目录,然后添加src。正如我在查看构建日志时看到的那样,这会生成库:sfml‑systemsfml‑windowsfml‑networksfml‑graphicssfml‑audiosfml‑main现在我想像这样将它们链接到General目录中的二进制文件:add_executable(main${main_SRCS})target_link_l

c++ - cmake - 全局链接器标志设置(针对目录中的所有目标)

我想将链接器标志传递给我项目中的所有子项目(子目录CMakeList)。在切换到新的cmake3.3之前,我使用了以下运行良好的代码(cmake3.2),为编译和链接添加了标志:set(CMAKE_CXX_FLAGS_DEBUG"${CMAKE_CXX_FLAGS_DEBUG}-stdlibc++")set(CMAKE_CXX_FLAGS_RELEASE"${CMAKE_CXX_FLAGS_RELEASE}-stdlibc++")在cmake3.3中,这不再有效,并且仅为编译步骤设置标志。我更新了CMakeList以使用更“现代”的cmake语法:set(MY_DEBUG_OPTION

c++ - 确定 clang 和 cmake 定义了哪些宏的最佳方法

我目前正在尝试通过使用名为Emscripten的惊人LLVM->Javascript项目将CGAL转换为Javascript。我只是用核心组件来做这件事(不是ImageIO或Qt的东西)我已经设法通过它的两个依赖项(GMP和MPFR)做到了这一点。令我惊讶的是,我能够将C测试类编译为Javascript(针对以位码形式生成的LLVM库),其在nodejs中运行的输出与native结果精确匹配。所有其他依赖项都是仅header(Eigen、Boost),除了一个-libboost-thread。现在,显然JS是单线程的,所以希望能够从CGAL代码中删除它。幸运的是,有一个CGAL_HAS