在我的大多数c ++项目中,我想使用visual studio默认目录结构中的不同目录结构。即:
/project
/build # put visual studio soluation and project files
/src # only put the c++ header files and source files
/bin # put the target executable files
/debug
/release
/tmp
/debug
/release
每次我在vs2010中创建一个solutaion我将配置这些目录(例如OutputDirectory),但现在我真的很无聊。
那么有没有一个工具可以根据我的配置文件自动生成vs2010解决方案和项目文件?我唯一的要求是设置这些目录。
答案 0 :(得分:5)
您可以使用以下CMakeList实现结构。以下假定文件位于.../project/CMakeLists.txt
:
cmake_minimum_required(VERSION 2.8) #every top-level project should start with this command; replace the version with the minimum you want to target
project(MyProjectName)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) # put .exe and .dll files here
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) # put .so files here (if you ever build on Linux)
set(CMAKE_MODULE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) # put .dll and .so files for MODULE targets here
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) # put .lib files here
# Note that for multi-configuration generators (like VS), the configuration name will be appended to the above directories automatically
# Now that the directories are set up, we can start defining targets
add_executable(MyExe src/myExe.cpp)
add_library(MyLib SHARED src/myDLL.cpp)
target_link_libraries(MyExe MyLib)
调用CMake时,将输出目录设置为.../project/build
(例如,在CMake GUI中)。如果从命令行运行,请执行以下操作:
> cd .../project/build
> cmake .. -G "Visual Studio 10"
请注意,当输出目录是源目录的子目录时,某些生成器(Eclipse)不喜欢它。对于这种情况,建议进行轻微的目录重构。
答案 1 :(得分:2)
例如,您可以在C#中编写这样的工具,查看Microsoft.Build.Construction
命名空间中的类,它们是用于以编程方式创建项目的。
然而,一个更简单但更通用的选项是在所有项目中使用相同的属性表,并设置所需的所有目录路径。这也具有可重用的巨大优势,因此如果您决定更改输出目录,则引用您的属性表的所有项目都会自动受到影响。 例如:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyMainDir>$(ProjectPath)\..\</MyMainDir>
<OutDir>$(MyMainDir)\bin\$(ConfigurationName)</OutDir>
<IntDir>$(MyMainDir)\tmp\$(ConfigurationName)</IntDir>
</PropertyGroup>
</Project>
这将首先找出你的'主目录',即你问题中名为'project'的那个,然后根据它和当前ConfigurationName
的名称设置输出和中间目录,默认情况下是Debug
或Release
。
现在只需在项目中导入此属性表:转到View->Other Windows->Property Manager
,右键单击项目,选择Add Existing property Sheet
。或者您可以在项目文件中手动添加<Import Project=....>
。
当您处于此状态时,您也可以在属性表中添加编译器/链接器选项,以便所有项目都使用相同的选项。这需要一些时间,但将来可以节省大量时间,因为您不必一遍又一遍地更改项目设置中的相同选项。