相关疑难解决方法(0)

在CMake中使用GLOB或每个文件单独指定源文件是否更好?

CMake提供了几种指定目标源文件的方法.一种是使用globbing(文档),例如:

FILE(GLOB MY_SRCS dir/*)
Run Code Online (Sandbox Code Playgroud)

另一个是单独指定每个文件.

哪种方式更喜欢?Globbing似乎很容易,但我听说它有一些缺点.

cmake

145
推荐指数
4
解决办法
7万
查看次数

将Source的子目录添加到cmake项目中

我有没有分成库的项目,但源是在目录树中组织的.我不知道如何告诉cmake进入目录,然后将该目录中的源添加到父目录中定义的项目.我尝试过以下方法:

在project/source/CMakelists.txt中:

set(SOURCE
    ${CMAKE_CURRENT_SOURCE_DIR}/unitTest/main.cpp
  )
add_subdirectory("${PROJECT_SOURCE_DIR}/folder1")
add_executable(UnitTestRNG ${SOURCE} ${HEADERS})
Run Code Online (Sandbox Code Playgroud)

然后在project/source/folder1/CMakeLists.txt中:

set(SOURCE
   ${SOURCE}
   ${CMAKE_CURRENT_SOURCE_DIR}/file1.cpp
   ${CMAKE_CURRENT_SOURCE_DIR}/file2.cpp
)
set(HEADERS
   ${HEADERS}
   ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp
   ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp
)
Run Code Online (Sandbox Code Playgroud)

使用一些message()语句,我发现子文件夹将获取SOURCE变量的内容,但是对该变量的新赋值将不会在返回到父CMakeLists.txt时持续存在

寻找示例并在cmake教程中得出结论: - 源文件结构通常在项目中是平的 - 如果代码被分成文件夹,它通常被分成相应的库.

我想知道是否有一些"最佳实践",我通过尝试这种结构而偏离它.

cmake

49
推荐指数
3
解决办法
6万
查看次数

标签 统计

cmake ×2