相关疑难解决方法(0)

如何在CMake中更改Win32版本的可执行输出目录?

我的问题是这样的:我正在使用Visual Studio 2010开发一个小解析器.我使用CMake作为构建配置工具.

但我发现默认的可执行构建行为,不方便.我想要的是,让我的最终计划位于:

E:/parsec/bin/<exe-name>.<build-type>.exe
Run Code Online (Sandbox Code Playgroud)

而不是

E:/parsec/bin/<build-type>/<exe-name>.exe
Run Code Online (Sandbox Code Playgroud)

你会怎么用CMake做到这一点?

c++ cmake visual-studio

13
推荐指数
1
解决办法
2万
查看次数

CMake:根据CMake生成的项目中的配置更改Visual Studio和Xcode exectuables的名称

我需要做的是设置我的可加密名称

program-debug for debug builds and 
program-release(or whatever) for other builds
Run Code Online (Sandbox Code Playgroud)

我希望以真正的跨平台方式实现这一点,同样非常重要 - 我希望以XCode和VS2008为目标 - 所以当我在一种下拉列表中更改配置时,它还必须具有正确的输出名称!我不想用其他-D选项重新生成.vcproj或.xcodeproj(但如果找不到解决方案,我将不得不这样做)

AFAIK cmake变量CMAKE_BUILD_TYPE应该适用于基于make的生成器 - 在make时评估in (如果我错了,请纠正我)

基本上,它是如何根据某些IDE /构建系统中的配置来设置目标选项(而非nessesary名称).它可能对整体cmake目标来说过于具体,但也许你可以提供帮助.

非常感谢!

cmake

7
推荐指数
1
解决办法
3482
查看次数

CMake:如何使用相对目录添加Boost.Test案例?

我有一个使用CMake和Boost.Test的工作项目,其目录结构如下(请原谅ASCII艺术):

+-proj
|---CMakeLists.txt
|---build
|---test
|\----dir1
|   \----foo.cpp // contains one BOOST_AUTO_TEST_SUITE and several BOOST_AUTO_TEST_CASE
|    |---bar.cpp // contains one BOOST_AUTO_TEST_SUITE and several BOOST_AUTO_TEST_CASE
 \----dir2
    \----foo.cpp // contains one BOOST_AUTO_TEST_SUITE and several BOOST_AUTO_TEST_CASE
     |---bar.cpp // contains one BOOST_AUTO_TEST_SUITE and several BOOST_AUTO_TEST_CASE
Run Code Online (Sandbox Code Playgroud)

我目前将所有源文件编译成一个可以与CTest一起运行的大型可执行文件.我的CMakeLists.txt看起来像这样:

file(GLOB_RECURSE test_cases FOLLOW_SYMLINKS "test/*.[h,c]pp")
add_executable(test_suite ${test_cases})
include_directories(${PROJECT_SOURCE_DIR} ${Boost_INCLUDE_DIRS})
target_link_libraries(test_suite ${Boost_LIBRARIES})
include(CTest)
add_test(test_runner test_suite)
Run Code Online (Sandbox Code Playgroud)

我想将每个.cpp文件编译成一个单独的可执行文件,并将其作为测试单独添加,以便我可以使用CTest正则表达式机制(特别是Boost.Test似乎没有的测试排除)来选择性地运行某些测试.但是,当CMake从dir1/dir2生成foo/bar的构建目标时,我得到名称冲突.

我的问题是:如何将整个目录树镜像test到一个类似的树下,build以便各种可执行文件之间不再存在名称冲突,以便CTest可以全部运行它们?

注意:不能在源树中重命名它们.我想foreach()对变量做一个${test_cases}(如本答案中所解释的),但我无法提取相关目录和文件名,并build/逐个文件地将它们移植到目录中.

更新:最后,我拼凑了这个脚本:

# get the test sources
file(GLOB_RECURSE …
Run Code Online (Sandbox Code Playgroud)

c++ boost cmake ctest boost-test

6
推荐指数
2
解决办法
2243
查看次数

如何不将Release或Debug添加到输出路径?

这是我当前的输出设置:

set( EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin")
set( LIBRARY_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin")
set( RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,我不希望(MSVS)将文件放入bin文件夹中的bin/Release或Debug文件夹中.我能以某种方式使用CMake实现它吗?

谢谢

cmake

5
推荐指数
1
解决办法
5940
查看次数

标签 统计

cmake ×4

c++ ×2

boost ×1

boost-test ×1

ctest ×1

visual-studio ×1