我在C++项目中的代码组织如下
.cpp和.h文件,其中包含我的班.cxx文件必须针对.cpp文件和一些外部库进行编译.现在,每个.cxx文件都有一个main()方法,所以我需要为这些文件中的每个文件添加一个不同的可执行文件.
此外,这些.cxx文件可能无法链接到相同的外部库.
我想在CMake中编写这个版本,我是一个新手,我该如何解决这个问题?
我正在尝试使用Visual Studio 2010在几年前构建一个基于CMake的项目,并且我遇到了与项目的输出目录有关的问题.Visual Studio在输出二进制文件时一直非常热衷于添加Debug /和Release /子目录,由于各种原因,我一直非常热衷于删除它们 - 现在我正在使用新版本的CMake和新版本的Visual Studio,CMake中的旧解决方案似乎不再起作用,我正在寻找找到"新"方法.
使用以前版本的CMake(2.6)和以前版本的Visual Studio(2008),我使用了以下内容:
IF(MSVC_IDE)
# A hack to get around the "Debug" and "Release" directories Visual Studio tries to add
SET_TARGET_PROPERTIES(${targetname} PROPERTIES PREFIX "../")
SET_TARGET_PROPERTIES(${targetname} PROPERTIES IMPORT_PREFIX "../")
ENDIF(MSVC_IDE)
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但似乎不再有诀窍.请问有关类似但更新的解决方法是否可以与CMake 2.8.6和Visual Studio 2010一起使用?
我需要做的是设置我的可加密名称
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和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) 这是我当前的输出设置:
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实现它吗?
谢谢