6

在我的大多数 c++ 项目中,我想使用与 Visual Studio 默认目录结构不同的目录结构。IE:

/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 中创建一个解决方案时,我都会配置这些目录(例如 OutputDirectory),但现在我对此真的很无聊。

那么有没有一个工具可以根据我的配置文件自动生成 vs2010 解决方案和项目文件?我唯一的要求是设置这些目录。

4

2 回答 2

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)不喜欢将输出目录作为源目录的子目录。对于这种情况,建议进行轻微的目录重组。

于 2013-03-27T09:14:25.437 回答
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>

这将首先找出您的“主目录”,即您的问题中名为“项目”的目录,然后根据该目录和当前的名称设置输出和中间目录ConfigurationName,默认情况下为Debugor Release

现在只需在项目中导入此属性表即可:转到View->Other Windows->Property Manager,右键单击项目,选择Add Existing property Sheet<Import Project=....>或者您可以在项目文件中手动添加一个。

当您使用它时,您还可以将编译器/链接器选项添加到属性表中,以便您的所有项目都使用相同的选项。现在这需要一些时间,但将来会为您节省大量时间,因为您不必一遍又一遍地更改项目设置中的相同选项。

于 2013-03-27T08:16:22.753 回答