CMake、预构建SDL2(和其他依赖项)(如果需要)

CMake、预构建SDL2(和其他依赖项)(如果需要),cmake,Cmake,实际上,当使用GCC作为编译器调用CMake时,SDL2可以开箱即用地编译,这让我非常高兴。软件应该总是这么简单,但我想要更多 假设我的所有软件都在这样的目录树中: F:/GIT/SDL2_0_3 F:/GIT/myProject 我想要实现的是调用CMake F:/GIT/myProject/build/XXX> cmake ../../ -G "GeneratorName" 获得 F:/GIT/myProject/bin/XXX/libMyProject.dll F:/GIT/my

实际上,当使用GCC作为编译器调用CMake时,SDL2可以开箱即用地编译,这让我非常高兴。软件应该总是这么简单,但我想要更多

假设我的所有软件都在这样的目录树中:

F:/GIT/SDL2_0_3
F:/GIT/myProject
我想要实现的是调用CMake

F:/GIT/myProject/build/XXX> cmake ../../ -G "GeneratorName"
获得

F:/GIT/myProject/bin/XXX/libMyProject.dll
F:/GIT/myProject/bin/XXX/libSDL2.dll
F:/GIT/myProject/build/XXX/projectfile 
XXX是目标的名称(我添加了一个变量):

是否可以“添加_子目录(SDL)”,这样我就可以将所有内容委托给

F:/GIT/SDL2_0_3/CMakeLists.txt
事实上,我必须单独构建SDL,但是进入X个文件夹中拥有X个不同的SDL二进制文件有点乏味(并且对每个依赖项重复X,因为我不限于SDL,实际上是一个批处理脚本在为我这样做,但我想移动到Cmake,因为它是可移植的)

我有一个包含我使用的所有库和项目(F:/GIT)的文件夹,因此我无法在以下位置使用CMakeLists.txt文件:

F:/GIT/CMakeLists.txt
所以这个问题不是重复的:(我需要一个不同的答案,因为另一个还不够)

附言:


我特别需要多个目标,因为我正在交叉编译并支持某些编译器的多个版本(因为不同编译器版本的二进制文件可能会崩溃…GCC u.u)

Ok终于找到了答案:

add_subdirectory( ../SDL2_0_3 ${CMAKE_BINARY_DIR}/SDL2)
首先,我必须使用一个相对路径,这样我可以使用
。/
返回1个目录级别,然后指定我感兴趣的文件夹,
SDL2\u 0\u 3
。然后,由于源目录在我的项目之外,我必须指定一个新的二进制目录(第二个参数是
add_subdirectory

我不能使用:

${CMAKE_BINARY_DIR}
因为我将得到类似的命名为Cmake的元文件(因此每一个都会覆盖另一个),所以我必须深入一点

${CMAKE_BINARY_DIR}/SDL2
但现在的问题是共享库非常稀少,所以我必须在需要的地方复制DLL

内部版本目录:

add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../build/${TARGET_NAME}/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../build/${TARGET_NAME}/tests/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../bin/${TARGET_NAME}/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_命令(目标SDL2后期构建)
命令${CMAKE_COMMAND}-E copy$
“../../build/${TARGET_NAME}/$”
)
在测试目录中:

add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../build/${TARGET_NAME}/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../build/${TARGET_NAME}/tests/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../bin/${TARGET_NAME}/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_命令(目标SDL2后期构建)
命令${CMAKE_COMMAND}-E copy$
“../../build/${TARGET_NAME}/tests/$”
)
在二进制版本目录中:

add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../build/${TARGET_NAME}/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../build/${TARGET_NAME}/tests/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_command(TARGET SDL2 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:SDL2> 
    "../../bin/${TARGET_NAME}/$<TARGET_FILE_NAME:SDL2>"
)
add_custom_命令(目标SDL2后期构建)
命令${CMAKE_COMMAND}-E copy$
“../../bin/${TARGET_NAME}/$”
)
唯一的缺点是,从CMake Gui构建SDL需要大约10秒,而从脚本构建SDL需要大约5分钟(我猜是因为他们从Gui构建unity)。我不想弄乱SDL脚本,所以我希望他们能尽快解决这个问题